假设我有一个字符串列表和一组相同的字符串:
l = [str1, str2, str3, str4, ...]
s = set([str1, str2, st3, str4, ...])
我需要与我拥有的短语进行字符串比较:comparephrase
comparephrase我需要迭代列表或集合中的所有元素,并生成比较字符串和比较字符串之间的比率。我知道set()当我们进行会员测试时速度会更快。但是,我不是在进行成员资格测试,而是比较我拥有的短语和列表/集中的字符串。set()仍然提供更快的速度吗?如果是这样,为什么?在我看来,这个集合实际上是一个里面有列表的集合。由于我们迭代集合中的列表,这不会花费很长时间吗?
Adi*_*haw 11
目前接受的答案是使用非常小的集合和列表,因此,差异可以忽略不计。
下面的代码解释了它:
>>> import timeit
>>> l = [ x*x for x in range(1, 400)] 
>>> s = set(l)
>>> timeit.timeit("for i in s: pass", "from __main__ import s")
12.152284085999781
>>> timeit.timeit("for i in l: pass", "from __main__ import l")
5.460189446001095
>>> timeit.timeit("if 567 in l: pass", "from __main__ import l")
6.0497558240003855
>>> timeit.timeit("if 567 in s: pass", "from __main__ import s")
0.04609546199935721
我不知道是什么导致集合迭代变慢,但事实从上面的输出中显而易见。
我已经使用 , 运行了一些测试timeit,并且(虽然list执行速度稍快)没有显着差异:
>>> import timeit
>>> # For the set
>>> timeit.timeit("for i in s: pass", "s = set([1,4,7,10,13])")
0.20565616500061878
>>> # For the list
>>> timeit.timeit("for i in l: pass", "l = [1,4,7,10,13]")
0.19532391999928223
即使尝试多次,这些值也保持非常相同(0.20与)。0.19
然而,创建集合的开销可能很大。