python wiki 说:“使用集合和字典进行成员资格测试 O(1) 比搜索序列 O(n) 快得多。在测试“a in b”时,b 应该是集合或字典,而不是一个列表或元组。”
每当速度在我的代码中很重要时,我一直在使用集合代替列表,但最近我一直想知道为什么集合比列表快得多。谁能解释一下,或者指向一个可以解释的来源,python 的幕后到底发生了什么以使集合更快?
最佳答案
list
:想象一下,你正在衣柜里找 socks ,但你不知道 socks 在哪个抽屉里,所以你必须通过以下方式搜索抽屉抽屉直到你找到它们(或者你可能永远不会这样做)。这就是我们所说的 O(n)
,因为在最坏的情况下,您会查看所有抽屉(其中 n
是抽屉的数量)。
set
:现在,假设您还在衣橱里寻找 socks ,但现在您知道 socks 在哪个抽屉里了,比如在第三个抽屉里.因此,您只需在第三个抽屉中搜索,而不是在所有抽屉中搜索。这就是我们所说的 O(1)
,因为在最坏的情况下,您只会看到一个抽屉。
关于python - 是什么让集合比列表更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8929284/