我正在寻找答案,但我没有发现任何关于我的问题。
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。
有人可以帮助我吗?
答案 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]