我正在尝试迭代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]]
,但我只需要获得整个list2。
答案 0 :(得分:5)
尝试一种更接近您想要的更简单的方法:
for e in list2:
if e[0] in list1:
list3.append(e)
您需要e[0]
,因为list2
是列表。您也可以使用filter() function:
list3 = filter(lambda e: e[0] in list1, list2)
list3 = [e for e in list2 if e[0] in list1]
答案 1 :(得分:1)
您的代码中只有一个错误。你需要x == y [0]而不是x == y。后者将字符串与列表进行比较。
您还可以使用列表推导
>>> [x for x in list2 if x[0] in list1]
[['aa', 1, 3, 7],['bc', 3, 4, 4]]
答案 2 :(得分:1)
看起来您的问题是因为您试图将元素列表与元素列表列表进行比较。
如果您单步执行for
循环,则会在第一次迭代时看到您正在进行比较
'aa'
针对['aa', 1, 3, 7]
,这可能不是您想要做的。
如果您只是比较第一个元素,则需要将for
循环更改为:
for x in list1:
for y in list2:
if x == y[0]:
list3.append(y)