python - 检查 Python 中两个字符串中的常用字母是否位于同一位置?

我正在尝试编写一个程序来检查两个字符串并打印两个字符串中位于相同位置的常见字符的数量,所以如果它检查了,就说:

  1. 单词'hello''heron' 它会输出 2 因为在相同的位置有两个共同的字母,

  2. 但是如果它检查了 'hello''fires' 它会输出 0 因为虽然它有一个共同的字母,它在每个字符串中的位置都不相同。

我将如何实现这一点?

最佳答案

您可以使用 zip() 同时遍历它们:

sum(1 if c1 == c2 else 0 for c1, c2 in zip(string1, string2))

甚至(为 TrueFalse 使用隐式整数值):

sum(c1 == c2 for c1, c2 in zip(string1, string2))

让我们分解一下:

zip(string1, string)

这会创建一系列元组,每个输入都有成对的项目,例如 helloheron 它看起来像这样:[('h ', 'h'), ('e', 'e'), ('l', 'r'), ('l', 'o'), ('o', 'n')].

for c1, c2 in

我们正在使用 generator expression迭代这些元组,将两个元素中的每一个分配给一个变量。

1 if c1 == c2 else 0

我们将发出一系列 1 和 0,其中 1 的数量等于等效位置字符相等的情况的数量。

sum()

最后,我们对发出的 1 和 0 序列求和 - 有效地计算相等字符的总数。

您甚至可以将其缩短一点,因为在 Python 中您可以将 bool 值 TrueFalse 视为 10 分别导致上面的第二种形式。

您可能想知道:如果 string1string2 的长度不同会怎样?这个表达式实际上仍然有效,因为 zip() 将在到达其中一个的末尾时立即停止。由于根据定义,较长字符串中的额外字符将不等于较短字符串中缺少的字符,因此这不会影响计数。

https://stackoverflow.com/questions/40065821/

相关文章:

java - 当 PoolingHttpClientConnectionManager 中的 Max

scala - 如何对spark Dataframe进行合并操作?

erlang - 有什么方法可以浏览 erlang 术语存储 (ETS)

r - 如何在列表列上应用一个函数并在 dplyr 和 purrr 中返回另一个函数?

angular - 取消选中所有选中的复选框 Angular2

python - Django 选择和字典

apache-spark - 从 Spark 转换函数中动态地从 HDFS 读取文件

scala - 隐式是私有(private)的吗?

sql-server - TSQL 触发器而不是插入

amazon-web-services - AWS : Security Group Auto Sc