列表搜索优化

时间:2010-11-26 00:09:58

标签: python optimization

first = [(1, text, text, 1, 2, 3), 
         (1, text, text, 1, 0, 3), ... (6054, text, text, 2, 2, 3)]
second = (1, 2, 3, 4, 5 ... 5412)

有更快的方法吗:

data = [x for x in first if x[0] in second]

2 个答案:

答案 0 :(得分:6)

试试这个:

first = [(1, text, text, 1, 2, 3), 
         (1, text, text, 1, 0, 3), ... (1054, text, text, 2, 2, 3)]
second = (1, 2, 3, 4, 5 ... 5412)
second_set = set(second)
data = [x for x in first if x[0] in second_set]

假设第一个有m个元素,第二个有n个元素。

集合经过哈希处理,因此搜索它们接近O(1),总效率为O(m)。在列表中搜索第二个是O(n),其总效率为O(m * n)。

答案 1 :(得分:1)

也许您只想要这个而不是in支票:

data = [x for x in first if 1 <= x[0] <= 5412 ]
相关问题