搜索子列表并将公共元素与其他子列表匹配

时间:2016-05-17 07:34:38

标签: python-3.x

我正在寻找答案,但我没有发现任何关于我的问题。

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与列表y匹配,其中我得到一个包含公共子列表的新列表z。 这只是一个例子,通常包含列表x和y 10000子列表。

我比较y ['1','100','105','601']并搜索列表x中的'100','105','601'(例如['100',220] ,0.5,0.25,0.1])。如果我找到匹配项,我会创建一个新列表z。

有人可以帮助我吗?

1 个答案:

答案 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]