リスト内包Pythonで2つのforループをフレーム化する方法 質問する

リスト内包Pythonで2つのforループをフレーム化する方法 質問する

以下に2つのリストがあります

tags = [u'man', u'you', u'are', u'awesome']
entries = [[u'man', u'thats'],[ u'right',u'awesome']]

entriesエントリを次の場所から抽出したいtags:

result = []

for tag in tags:
    for entry in entries:
        if tag in entry:
            result.extend(entry)

2 つのループを 1 行のリスト内包表記として記述するにはどうすればよいでしょうか?

ベストアンサー1

これを覚える最も良い方法は、リスト内包表記内の for ループの順序は、従来のループ アプローチで出現する順序に基づいているということです。最も外側のループが最初に来て、その後に内側のループが続きます。

したがって、同等のリストの理解は次のようになります。

[entry for tag in tags for entry in entries if tag in entry]

一般的に、if-elseステートメントは最初の for ループの前に来ます。ステートメントだけがある場合はif、最後に来ます。たとえば、tagエントリに がない場合に空のリストを追加したい場合は、次のようにします。

[entry if tag in entry else [] for tag in tags for entry in entries]

おすすめ記事