【发布时间】:2017-09-29 16:31:29
【问题描述】:
问题:
我需要在long 列表(约600,000 个条目)和short 列表(约300,000 个条目)之间执行一项有点复杂的交叉引用任务。我试图在两个列表之间找到相似的条目,每个唯一条目由三个不同的整数标识(称它们为int1、int2 和int3)。基于一个列表中的三个整数标识符,我想查看这三个相同的整数是否在另一个列表中,并返回它们是哪些。
尝试:
首先,我将long 列表中的每个三整数元组压缩到一个名为a 的数组中。同样,我将short 列表中的每个三整数元组压缩到一个名为b 的数组中:
a = [(int1,int2,int3),...] # 600,000 entries
b = [(int1,int2,int3),...] # 300,000 entries
然后我遍历a 中的每个条目以查看它是否在b 中。如果是,我将相应的元组附加到循环外的一个名为 c 的数组中:
c= []
for i in range(0,len(a),1):
if a[i] in b:
c.append(a[i])
迭代(毫不奇怪)非常慢。我猜 Python 必须在每次迭代时检查 b 是否为 a[i](约 300,000 次!),它的迭代次数为 600,000 次。现在已经用了一个多小时了,还没有完成,所以我知道我应该优化一些东西。
我的问题是:执行这种交叉引用的最 Pythonic 或最快的方法是什么?
【问题讨论】:
标签: python arrays pandas numpy list-comprehension