这是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都有(见指针意见重新:改变):
>>> 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中查找列表/序列,元组,压缩文件,筛选器和lambda以充分了解解决方案。
哦,欢迎到编程:-)
'= +'不'+ =',''==实际上并没有做任何事情,如果你把它改为'=',它会做错事。 – user2357112
您正在使用运算符'+ ='不正确。你的代码总是正确接收'+ 1'而不是递增。 – Mephy
而不是range-len迭代,只需使用'zip'即可。它会在最短输入序列的末尾自动停止,这正是您想要的。 – user2357112