哪个更快:迭代集合和迭代lis

2024-10-01 11:38:43 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个字符串列表和一组相同的字符串:

l = [str1, str2, str3, str4, ...]
s = set([str1, str2, st3, str4, ...])

我需要运行一个字符串比较,我有一个短语:comparephrase

我需要迭代列表或集合中的所有元素,并在comparephrase和比较的字符串之间生成一个比率。我知道当我们进行成员资格测试时,set()会更快。但是,我不是在做成员资格测试,而是比较我拥有的短语和列表/集合中的字符串。set()是否仍然提供更快的速度?如果是,为什么?在我看来,这个集合实际上是一个里面有一个列表的集合。既然我们要在集合中迭代列表,那不是要花很长时间吗?在


Tags: 字符串元素列表成员速度比率set资格
2条回答

Python集针对相等性测试和重复删除进行了优化,因此在其下面实现了一个哈希表。我相信这会使它比列表慢一点,如果你必须将每个元素与comparephrase进行比较;列表非常适合一个接一个地迭代每个元素。不过,这种差异在几乎任何情况下都可能微不足道。在

我用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.200.19)。在

但是,创建集合的开销可能是significant。在

相关问题 更多 >