带有索引的2个嵌套列表的python联合

时间:2010-03-18 14:57:04

标签: python dataset list nested union

我希望获得2个嵌套列表的并集以及常用值的索引。

我有两个列表,例如A = [[1,2,3],[4,5,6],[7,8,9]]B = [[1,2,3,4],[3,3,5,7]],但每个列表的长度大约是100 000.到A属于一个带有len(A)的索引向量:I = [2,3,4]

我想要的是找到B中的所有子列表,其中前3个元素等于A中的子列表。在此示例中,我希望返回B[0][1,2,3,4]),因为它的前三个元素等于A[0]。此外,我还希望在此示例中将索引设置为A[0],即I[0]

我尝试了不同的东西,但到目前为止没有任何工作:(

首先我尝试了这个:

Common = []

for i in range(len(B)):

   if B[i][:3] in A:

      id = [I[x] for x,y in enumerate(A) if y == B[i][:3]][0]
         ctdCommon.append([int(id)] + B[i])   

但这需要很长时间,或者永远不会结束

然后我将AB转换成集并从两者中取出了联合,这非常快,但后来我不知道如何获得相应的索引

有没有人有想法?

1 个答案:

答案 0 :(得分:1)

创建辅助字典(work is O(len(A)) - 假设A中子列表的前三项唯一标识它(否则你需要列表的字典):

aud = dict((tuple(a[:3]), i) for i, a in enumerate(A))

使用所述dict在B上循环一次(work is O(len(B)))以获得B子列表和A索引:

result = [(b, aud[tuple(b[:3])]) for b in B if tuple(b[:3]) in aud]