我有两个字符串:
a = "hello world"
b = "world hello"
哪个会运行得更快?
set(a)==set(b)
或
from collections import Counter
Counter(a)==Counter(b)
为什么?而且有什么运行速度更快的吗?
答案 0 :(得分:1)
当您要对诸如此类的简单表达式进行基准测试时,可以使用timeit模块。或更妙的是,如果安装了IPython,则可以简单地使用timeit magic命令,例如:
%timeit Counter(a)==Counter(b)
答案 1 :(得分:1)
set
比较会运行得更快。造成这种情况的主要原因有两个:
1)与Counter()
相比,set()
中的信息更多
2)与Counter()
相比,建立set()
对象所需的操作更多。
粗略地说,Counter()
是一个字典,由键值对组成。在Counter中,这些值具有计算键的出现次数的特殊含义。
相比之下,set()
仅包含有关键的信息。
在解决您应该使用哪一个的问题时,这取决于您要实现的目标,因为两个表达式不相等:
from collections import Counter
a = "hello world"
b = "world helo"
set(a) == set(b)
# True
Counter(a) == Counter(b)
# False
因此,很难在这个方向上给出更多的提示。