使用python在列表列表中查找匹配值

时间:2013-09-22 13:01:43

标签: python list

我正在尝试迭代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。

3 个答案:

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

或使用list comprehension

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)