1

Python 2.7.5 でリストのリストを反復処理し、次のような最初の値が 2 番目のリストで見つかったものを返そうとしています。

#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]ので必要です。filter() 関数list2を使用して、これを 1 行で記述することもできます。

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 に答える
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 に答える