1

我正在尝试遍历 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。

4

3 回答 3

6

尝试更简单的方法,更接近您想要的:

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]
于 2013-09-22T13:09:00.043 回答
2

您的代码中只有一个错误。你需要 x == y[0] 而不是 x == y。后者是将字符串与列表进行比较。

您还可以使用列表推导

>>> [x for x in list2 if x[0] in list1]
[['aa', 1, 3, 7],['bc', 3, 4, 4]]
于 2013-09-22T13:07:02.597 回答
1

看起来您的问题是因为您试图将元素列表与元素列表进行比较。

如果您逐步执行for循环,您会看到在第一次迭代中您正在与 进行比较 'aa'['aa', 1, 3, 7]这可能不是您想要做的。

如果您只是比较第一个元素,则需要将for循环更改为:

for x in list1:
    for y in list2:
        if x == y[0]:
            list3.append(y)
于 2013-09-22T13:11:27.320 回答