2010-03-18 78 views
1

我想要得到2個嵌套列表的聯合以及共同值的索引。2個索引的嵌套列表的Python聯合

我有兩個列表像A = [[1,2,3],[4,5,6],[7,8,9]]B = [[1,2,3,4],[3,3,5,7]],但每個列表的長度大約是100萬給一個屬於與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

創建一個輔助字典(工作O(len(A)) - 假設一個唯一標識它的前三個項目的子列表的(否則你需要列出的字典):

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

使用字典說循環一旦B(工作O(len(B))),以獲得乙子表和A指數:

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

做得好的工作了足夠的什麼東西被要求出示一個答案。我的大腦很難理解他想要什麼。 – MattH 2010-03-18 15:18:07

+0

工作和超級!非常感謝! – sbas 2010-03-18 15:20:34