我正在尝试编写一个程序来检查两个字符串并打印两个字符串中位于相同位置的常用字符数,因此如果选中它,请说:
单词'hello'
和'heron'
会输出2
,因为在同一位置有两个常见字母,
但如果选中'hello'
和'fires'
,则会输出0
,因为虽然它有一个共同的字母,但它在每个字符串中的位置不同。
我将如何实现这一目标?
答案 0 :(得分:5)
您可以使用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中你可以将布尔值True
和False
分别视为1
和0
,这会导致第二种形式上方。
您可能想知道:如果string1
和string2
的长度不同,会发生什么?这个表达式实际上仍然可以工作,因为zip()
一旦到达任何一个结尾就会停止。因为根据定义,较长字符串中的额外字符将不等于较短字符串中的字符不足,这不会影响计数。