我正在尝试编写一个程序来检查两个字符串并打印两个字符串中位于相同位置的常见字符的数量,所以如果它检查了,就说:
单词'hello'
和 'heron'
它会输出 2
因为在相同的位置有两个共同的字母,
但是如果它检查了 'hello'
和 'fires'
它会输出 0
因为虽然它有一个共同的字母,它在每个字符串中的位置都不相同。
我将如何实现这一点?
最佳答案
您可以使用 zip()
同时遍历它们:
sum(1 if c1 == c2 else 0 for c1, c2 in zip(string1, string2))
甚至(为 True
和 False
使用隐式整数值):
sum(c1 == c2 for c1, c2 in zip(string1, string2))
zip(string1, string)
这会创建一系列元组,每个输入都有成对的项目,例如 hello
和 heron
它看起来像这样:[('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 值 True
和 False
视为 1
和 0
分别导致上面的第二种形式。
您可能想知道:如果 string1
和 string2
的长度不同会怎样?这个表达式实际上仍然有效,因为 zip()
将在到达其中一个的末尾时立即停止。由于根据定义,较长字符串中的额外字符将不等于较短字符串中缺少的字符,因此这不会影响计数。
https://stackoverflow.com/questions/40065821/