我有一个超过 100000 个值的列表,我正在迭代这些值并检查每个值是否包含在另一个随机值列表(相同大小)中。
我是通过使用 if item[x] in randomList
来做到这一点的。
这有多有效? python 是否对每个容器进行某种散列处理,还是在内部直接搜索另一个容器以找到我要查找的元素?
另外,如果它线性地进行搜索,那么它是否会创建一个 randomList 字典并使用它进行查找?
最佳答案
in
是由它应用的对象的 __contains__
魔术方法实现的,所以效率取决于它。例如, set
、 dict
和 frozenset
将是基于哈希的查找,而 list
将需要线性搜索。但是,xrange
(或 Python 3.x 中的 range
)有一个不需要线性搜索的 __contains__
方法,而是可以使用开始/停止/步骤信息来确定真值。 (例如:7 in xrange(4, 1000000)
不是线性完成的)。
自定义类可以自由地实现 __contains__
,但它们认为合适,但理想情况下,如果“不明显”,应该在文档中提供一些有关它如何实现的信息。
关于python - 对于大型列表,Python 的 'in' 或 'not in' 运算符的效率如何?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17220296/