比较两个字符串中的字符,无论其位置如何

时间:2017-03-05 03:56:07

标签: python string python-3.x

我有一个函数similarity(s, t),它比较两个字符串和所述字符串的元素,无论它们的位置如何,并返回相同元素的数量。我的代码:

def similarity(s, t):
   return sum(s == t for s, t in zip(s, t))

唯一的问题是测试如:

similarity('ab','ba') == 2

失败。我猜是因为它只检查第一个元素,然后返回结果。无论如何使用zip()来解决这个问题,还是应该采取更艰苦的路线?

1 个答案:

答案 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 的问题在于它按索引拉链元素,所以你只比较同一位置的项目。