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?