2016-05-17 39 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 –

相关问题