在python中优化“if number in list”

时间:2015-10-19 16:30:50

标签: python

我在python中有一个很大的(~10 6 )浮动列表,我重复调用if number in list。列表不会改变。有没有办法加速这个过程,比如对列表进行排序,并利用它的排序?

3 个答案:

答案 0 :(得分:0)

您应该将列表更改为设置(如果设置为常量,则更改为冻结设置)。

示例:

l = [1, 2, 3]
s = set(l)  # frozenset(l)
obj in l  # O(n) lookup
obj in s  # O(1) lookup

答案 1 :(得分:0)

  1. 将列表转换为一个集合,以删除重复项并优化成员资格测试。
  2. 确保集合仅加载一次到RAM
  3. 如果需要使用排序列表,请使用the array bisection algorithm(即您不想删除重复项,需要进行插入等)。
  4. 如果尝试计算两个选项的时间复杂度,see this handy reference.

答案 2 :(得分:0)

您可以将列表转换为一个集合,这可能会占用大量内存和计算时间(并且会删除重复项)。

或者您也可以使用模块bisect来利用您的列表已排序的事实。第一个搜索时间为O(1),第二个搜索时间为O(log(n))