如何比较两个字符串,其中元素的顺序无关紧要

时间:2015-09-30 19:58:48

标签: string python-2.7 compare

我正在寻找一些函数,我可以比较两个字符串,除了元素的顺序无关紧要。 E.g:

'abc' == 'bca'
True

python是否有这样的内置函数?

2 个答案:

答案 0 :(得分:4)

python中的字符串是可返回字符串中字符的迭代。像任何迭代一样,它们可以用sorted包装。如果你比较那些包装器,你基本上要比较两个字符串中是否有相同的字符,无论它们的原始顺序如何:

>>> s = 'abc'
>>> t = 'bca'
>>> s == t
False
>>> sorted(s) == sorted(t)
True

答案 1 :(得分:2)

6对于较小的字符串,您可以在两个字符串上调用排序:

def is_equal(a, b):
    return len(a) == len(b) and sorted(a) == sorted(b)

如果sorted(a) == sorted(b)为True,则两个字符串的长度必须相同且字符相同:

如果字符串长度相同,则使用Counter dict来计算频率:

 from collections import Counter


def is_equal(a, b):
    return len(a) == len(b) and Counter(a) == Counter(b)

如果字符串长度不同,则它们不能相等,如果它们都是a中的字符必须在b中并且频率必须相同。解决方案是O(n),而O(n log n)调用已排序的