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

String 如何比较两个字符串,其中元素的顺序无关紧要,string,python-2.7,compare,String,Python 2.7,Compare,我在寻找一个函数,可以比较两个字符串,但元素的顺序无关紧要。例如: 'abc' == 'bca' True python有这样的内置函数吗?6对于较小的字符串,可以在两个字符串上调用sorted: def is_equal(a, b): return len(a) == len(b) and sorted(a) == sorted(b) 要使排序(a)=排序(b)为真,两个字符串必须具有相同的长度和相同的字符: 或者,如果字符串长度相同,则使用计数器dict计算频率: from c

我在寻找一个函数,可以比较两个字符串,但元素的顺序无关紧要。例如:

'abc' == 'bca'
True

python有这样的内置函数吗?

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

def is_equal(a, b):
    return len(a) == len(b) and sorted(a) == sorted(b)
要使排序(a)=排序(b)为真,两个字符串必须具有相同的长度和相同的字符:

或者,如果字符串长度相同,则使用
计数器
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)
调用sorted

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

def is_equal(a, b):
    return len(a) == len(b) and sorted(a) == sorted(b)
要使排序(a)=排序(b)为真,两个字符串必须具有相同的长度和相同的字符:

或者,如果字符串长度相同,则使用
计数器
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)
在python中调用排序的字符串是返回字符串中字符的可重用项。与任何iterable一样,它们可以用排序的
包装。如果比较这些包装器,本质上就是比较两个字符串中的字符是否相同,而不管它们的原始顺序:

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

python中的字符串是返回字符串中字符的可编辑项。与任何iterable一样,它们可以用排序的
包装。如果比较这些包装器,本质上就是比较两个字符串中的字符是否相同,而不管它们的原始顺序:

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

每个字母出现的次数是否也必须匹配?
set
比较在这里可能很有用(
set('abc')==set('bca')
),但如果重复性很重要,则不可用。那么
aabc
bac
呢?aabc与bac的比较应该是false。每个字母的出现次数也必须匹配吗?一个
set
比较在这里可能有用(
set('abc')==set('bca')
),但如果重复性很重要的话就没有了。那么
aabc
bac
呢?aabc与bac的比较应该是错误的。如果重复性很重要,这是一个比我更有效的解决方案。这是完美的。谢谢。如果重复的问题,这是一个比我的更有效的解决方案。这是完美的。非常感谢。