在python中以随机顺序将两个字符串与字母匹配

在python中以随机顺序将两个字符串与字母匹配,python,regex,Python,Regex,如果我有两个字符串,比如: 我想使用一个正则表达式(或其他什么?)来查看这两个字符串是否包含相同的字母。在我的例子中,a=b,因为它们有相同的字母。如何实现这一点?O(n)算法是创建每个字母计数的字典,然后比较字典 a = "hello" b = "olhel" print sorted(a) == sorted(b) 在Python 2.7或更新版本中,可以使用以下方法完成此操作: @Rafe举了另一个“Pythonic”这个流行词毫无意义的例子。在你刚刚使用它的地方,它肯定没有任何意义

如果我有两个字符串,比如:

我想使用一个正则表达式(或其他什么?)来查看这两个字符串是否包含相同的字母。在我的例子中,a=b,因为它们有相同的字母。如何实现这一点?

O(n)算法是创建每个字母计数的字典,然后比较字典

a = "hello"
b = "olhel"
print sorted(a) == sorted(b)
在Python 2.7或更新版本中,可以使用以下方法完成此操作:


@Rafe举了另一个“Pythonic”这个流行词毫无意义的例子。在你刚刚使用它的地方,它肯定没有任何意义。你想说什么?“以特定于Python的方式”几乎不是一个积极的特征。这个解决方案没有什么大问题(不管怎么说,乍一看),但它和我的Python代码一样自然。@Mark:我认为这是O(m log n),其中m是字符串的长度,n是不同字母的数量。您对每个字母(m)进行迭代,然后在由n个条目组成的基础dict中查找该字母。实际上,由于dict是一个哈希表,对于较小的n值,它可能会执行接近O(n)的操作,但如果您向它抛出许多不同的字符(例如CJK),它可能会显著降级。@Glenn:我想我明白您的意思了,但我不认为补充某人充分使用Python是一件坏事。@Glenn:日志n来自哪里?n以一个小常数为界,因此更新字母的出现次数应该是O(1)。在一个简单的例子中,就像你的例子一样,它可以完美地工作。但在我的刽子手游戏中,它做了同样的事情(我打印字符串以检查它们是否相等),它不起作用。你能告诉我怎么了吗?代码:(第230行)您必须自己调试。打印出排序后的值,看看它们是如何不相等的。案例空白?不同的长度?如果可以忽略每个字母的计数,您可以简单地使用
set(a)==set(b)
,这比
sorted(a)==sorted(b)
@Satoru Logic快:如果这是一个答案,我会投票支持您的评论。我自己会把它贴出来的,但那太下流了。
a = "hello"
b = "olhel"
print sorted(a) == sorted(b)
>>> from collections import Counter
>>> Counter('hello') == Counter('olhel')
True