リスト内包表記における二重反復 [重複] 質問する

リスト内包表記における二重反復 [重複] 質問する

Pythonではリスト内包表記で複数のイテレータを持つことができます。

[(x,y) for x in a for y in b]

適切なシーケンス a と b について。私は Python のリスト内包表記のネストされたループのセマンティクスを認識しています。

私の質問は、理解内の 1 つの反復子が他の反復子を参照できるかどうかです。言い換えると、次のようなものになります。

[x for x in a for a in b]

外側のループの現在の値が内側のループの反復子になる場所はどこですか?

たとえば、ネストされたリストがある場合:

a=[[1,2],[3,4]]

この結果を達成するためのリスト内包表現は次のようになります。

[1,2,3,4]

?? (私が知りたいのは理解に関する回答だけなので、理解に関する回答のみをリストしてください)。

ベストアンサー1

文章がいっぱいのテキストがあり、単語の配列が必要だとします。

# Without list comprehension
list_of_words = []
for sentence in text:
    for word in sentence:
       list_of_words.append(word)
return list_of_words

私はリストの内包表記を、コードを水平方向に伸ばすものと考えるのが好きです。

次のように分割してみてください:

# List Comprehension 
[word for sentence in text for word in sentence]

例:

>>> text = (("Hi", "Steve!"), ("What's", "up?"))
>>> [word for sentence in text for word in sentence]
['Hi', 'Steve!', "What's", 'up?']

これは発電機にも適用されます

>>> text = (("Hi", "Steve!"), ("What's", "up?"))
>>> gen = (word for sentence in text for word in sentence)
>>> for word in gen: print(word)
Hi
Steve!
What's
up?

おすすめ記事