列表搜索优化

问题描述:

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] 
+0

其根本不清楚你想要做什么。从我所能看到的所有元素开始将被选中 – Falmarri 2010-11-26 00:17:18

+0

@Falmarri - 编辑后使事情更清晰。 – Sam 2010-11-26 00:22:29

试试这个:

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)的总体效率。

+0

哇,谢谢!执行速度真的很明显...... – Sam 2010-11-26 00:54:01

也许你想的只是这不是in检查:

data = [x for x in first if 1 <= x[0] <= 5412 ]