我有一个函数similarity(s, t)
,它比较两个字符串和所述字符串的元素,无论它们的位置如何,并返回相同元素的数量。我的代码:
def similarity(s, t):
return sum(s == t for s, t in zip(s, t))
唯一的问题是测试如:
similarity('ab','ba') == 2
失败。我猜是因为它只检查第一个元素,然后返回结果。无论如何使用zip()
来解决这个问题,还是应该采取更艰苦的路线?
答案 0 :(得分:2)
最简单的解决方案是使用collections.Counter
:
Traceback (most recent call last):
File ".\wunder.py", line 17, in <module>
print(j['current_observation']['zip'])
KeyError: 'zip'
哪个应该正确:
from collections import Counter
def similarity(a, b):
cnts1 = Counter(a)
cnts2 = Counter(b)
diff = cnts1 - cnts2
return len(a) - sum(diff.values())
# or if you want it as one liner:
# return len(a) - sum((Counter(a) - Counter(b)).values())
>>> similarity('ab', 'ba')
2
>>> similarity('aba', 'bab')
2
的问题在于它按索引拉链元素,所以你只比较同一位置的项目。