![](/img/trans.png)
[英]Python - Compare two lists and find matching values and their positions in the list
[英]Find matching values in a list of lists using python
我正在尝试遍历python 2.7.5中的列表列表,并返回在第二个列表中找到第一个值的列表,如下所示:
#python 2.7.5
list1 = ['aa', 'ab', 'bb', 'bc', 'cc']
list2 = [['aa', 1, 3, 7],['de', 2, 2, 1],['bc', 3, 4, 4]]
list3 = []
for x in list1:
for y in list2:
if x == y:
list3.append(y)
因此,我希望list3包含[['aa',1,3,7],['bc', 3, 4, 4]]
3,4,4 [['aa',1,3,7],['bc', 3, 4, 4]]
但我只是得到整个list2。
尝试更接近您想要的方法:
for e in list2:
if e[0] in list1:
list3.append(e)
您需要e[0]
因为list2
是一个列表列表。 您也可以使用filter()函数将其写在一行中:
list3 = filter(lambda e: e[0] in list1, list2)
或使用列表理解 :
list3 = [e for e in list2 if e[0] in list1]
您的代码中只有一个错误。 您需要x == y [0]而不是x == y。 后者正在将字符串与列表进行比较。
您还可以使用列表推导
>>> [x for x in list2 if x[0] in list1]
[['aa', 1, 3, 7],['bc', 3, 4, 4]]
看来您的问题是因为您试图将元素列表与元素列表进行比较。
如果遍历for
循环,您会发现在第一次迭代中,您正在将'aa'
与['aa', 1, 3, 7]
,这可能不是您想要的。
如果您只是比较第一个元素,则需要将for
循环更改for
:
for x in list1:
for y in list2:
if x == y[0]:
list3.append(y)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.