python – 迭代两个字符串,当相同索引处的字符匹配时返回计数

我有两个单词,一个是用户输入字符串,另一个是从文本文件中随机选择的单词.我想返回两个stings中相等的计数值并共享相同的字符串索引.例如word1 =’bleed’,word2 = slice:similar = 1.

word1 = 'frog'
word2 = 'friend'
correct = 0

if len(word1) > len(word2):
    for i in range(len(word2)):
        if word1[i] == word2[i]:
            correct =+ 1
        else:
            correct == 0

else:
   for i in range(len(word1)):
       if word1[i] == word2[i]:
           correct =+ 1
       else:
           correct == 0

我是编程的新手,不幸的是我的尝试最大限度地输出了正确= 1.对于我在示例青蛙和朋友中使用的单词我希望看到正确= 2,我的代码产生正确= 1.我如何添加到正确,超过1?谢谢

最佳答案
使用zip()和内置函数的filter()会更容易:

Python 2.x:

In [23]: word1 = 'frog'
In [24]: word2 = 'friend'
In [25]: print len(filter(lambda (x, y): x == y, zip(word1, word2)))
2

Python 3.x(请参阅指针re:changes的注释):

>>> word1 = 'frog'
>>> word2 = 'friend'
>>> len(list(filter(lambda xy: xy[0] == xy[1], zip(word1, word2))))
2

更新:既然你是编程新手,我会尝试解释一下这个解决方案:

Python支持序列(通常被认为是有序的项目列表),例如[1,2,3]或[‘a’,’b’,’c’,123,456].但是,Python也将字符串视为一个有序的字符列表,因此’hello world’也是一个列表.因此,您也可以在字符串上应用Python的与列表相关的运算符/内置函数.因此,您的问题减少了将word1和word2视为列表并在这些列表中找到其项匹配的索引.

因此,让我们使用Python的特殊函数.zip是一个漂亮的函数,它接受多个序列,并为索引X处的每个项创建一个新列表,由每个输入序列中索引X处的值组成.例如,zip([1,2],[3,4])变为[(1,3),(2,4)],zip(‘foo’,’bar’)变为[(‘f’,’ b’),(‘o’,’a’),(‘o’,’r’)].最后的结果对你的问题非常有用 – 现在你只需要通过一个函数运行每个元组的函数(即形式(x,y)的值)来检查值是否相等.您可以像在其他语言中一样在循环中执行此操作,但您也可以让Python为您执行循环,并提供一个函数,该函数通过使用filter()等函数返回对列表中的每个元组应用相等性的结果或map().在您的情况下,您希望filter()在输入列表中运行,并包含原始列表中的每个值,这些值导致传入函数的值(解决方案中的lambda)为True. “已过滤”列表的长度基本上是匹配的数量.

希望这可以帮助.请注意,如果您是Python新手,则需要在一本好书或official Python reference中查找列表/序列,元组,zip,过滤器和lambda以完全理解该解决方案.

哦,欢迎编程:-)

转载注明原文:python – 迭代两个字符串,当相同索引处的字符匹配时返回计数 - 代码日志