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],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’),’r’)].最后的结果对你的问题非常有用 – 现在你只需要通过一个函数运行每个元组的函数(即形式(x,y)的值)来检查值是否相等.您可以像在其他语言中一样在循环中执行此操作,但您也可以让Python为您执行循环,并提供一个函数,该函数通过使用filter()等函数返回对列表中的每个元组应用相等性的结果或map().在您的情况下,您希望filter()在输入列表中运行,并包含原始列表中的每个值,这些值导致传入函数的值(解决方案中的lambda)为True. “已过滤”列表的长度基本上是匹配的数量. 希望这可以帮助.请注意,如果您是Python新手,则需要在一本好书或official Python reference中查找列表/序列,元组,zip,过滤器和lambda以完全理解该解决方案. 哦,欢迎编程:-) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |