列表搜索优化
问题描述:
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]
答
试试这个:
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 ]
其根本不清楚你想要做什么。从我所能看到的所有元素开始将被选中 – Falmarri 2010-11-26 00:17:18
@Falmarri - 编辑后使事情更清晰。 – Sam 2010-11-26 00:22:29