2016-05-17 60 views
0

我在尋找答案,但我沒有找到任何關於我的問題的信息。在子列表中搜索並與其他子列表中的常見元素匹配

x=[['100',220, 0.5, 0.25, 0.1],['105',400, 0.12, 0.56, 0.9],['600',340, 0.4, 0.7, 0.45]] 

y=[['1','100','105','601'],['2','104','105','600'],['3','100','105','604']] 

我想作爲結果:

z=[['1','100',0.5,0.25,0.1,'105',0.12,0.56,0.9],['2','105',0.12,0.56,0.9,'600',0.4,0.7,0.45],['3','100',0.5, 0.25, 0.1,'105', 0.12, 0.56, 0.9]] 

我想在列表y和匹配列表x,其中我得到一個新的列表ž是containts共同的子列表搜索與清單年。 這只是一個例子,通常包含列表x和y 10000個子列表。在列表x中搜索'100','105','601'(例如['100','100','105','601' 220,0.5,0.25,0.1])。如果我找到一個匹配,我會創建一個新的列表z。

有人可以幫助我嗎?

+0

匹配發生在哪個數字? ..請指定組合列表的邏輯 – ritesht93

+0

你只是想計算兩個列表的扁平化版本的共同元素嗎? –

+0

我想再次做一個嵌套列表。 –

回答

0

答案編輯,因爲評論

您在評論中說:

搜索在每個y的第二,第三和第四個數字。和比較,與數量上進行一個列表X

的話,我想補充(從列表中移除x)的數字上進行1,3,4,5

然後嘗試這樣的事:

x = [ 
    ['100', 220, 0.5, 0.25, 0.1], 
    ['105', 400, 0.12, 0.56, 0.9], 
    ['600', 340, 0.4, 0.7, 0.45] 
] 

y = [ 
    ['1', '100', '105', '601'], 
    ['2', '104', '105', '600'], 
    ['3', '100', '105', '604'] 
] 

z = [] 

xx = dict((k, v) for k, _, *v in x) 

for first, *yy in y: 
    zz = [first] 
    for n in yy: 
     numbers = xx.get(n) 
     if numbers: 
      zz.append(n) 
      zz.extend(numbers) 
    z.append(zz) 

print(z) 

z現在應該是:

[['1', '100', 0.5, 0.25, 0.1, '105', 0.12, 0.56, 0.9], 
['2', '105', 0.12, 0.56, 0.9, '600', 0.4, 0.7, 0.45], 
['3', '100', 0.5, 0.25, 0.1, '105', 0.12, 0.56, 0.9]] 

首先,我轉換成x一本字典,方便查找。 這裏使用的迭代模式與pep-3132介紹和工作原理是這樣:

>>> head, *tail = range(5) 
>>> head 
0 
>>> tail 
[1, 2, 3, 4] 
+0

但是如果我找到了你的答案:你正在尋找每個y的子列表中的第二個數字,並且只添加x中的較小數字?不,我要搜索每個y中的第二,第三和第四個數字。並將其與列表x中的地點一的數字進行比較。 –

+0

對不起,我不是母語。我想我在文中犯了一些錯誤(你引用)。代碼中的「yy」包含每個「y」中的第二,第三和第四個數字。如果其中一個(''n'')放在''x''(''numbers = xx.get(n)''')之一,你現在怎麼辦?只添加較小的數字<=''n''? – spky

+0

比我想添加(從列表x)數字的地方1,3,4,5 –

相關問題