これを for ループと考えてください:
y = []
for z in ('a', 'b\nc', 'd'):
y.extend(z.splitlines())
フラットリストy
は同様に取得されません
y = []
y.extend(z.splitlines() for z in ('a', 'b\nc', 'd'))
フラット リストを返すようにジェネレータ式を変更できますか?
これを for ループと考えてください:
y = []
for z in ('a', 'b\nc', 'd'):
y.extend(z.splitlines())
フラットリストy
は同様に取得されません
y = []
y.extend(z.splitlines() for z in ('a', 'b\nc', 'd'))
フラット リストを返すようにジェネレータ式を変更できますか?
二重ループが必要です:
y.extend(v for z in ('a', 'b\nc', 'd') for v in z.splitlines())
空で始まる場合y
は、これをリスト内包表記にすることもできます。
y = [v for z in ('a', 'b\nc', 'd') for v in z.splitlines()]
次のものも使用できますitertools.chain.from_iterable()
。
from itertools import chain
y.extend(chain.from_iterable(z.splitlines() for z in ('a', 'b\nc', 'd')))
デモ:
>>> from itertools import chain
>>> [v for z in ('a', 'b\nc', 'd') for v in z.splitlines()]
['a', 'b', 'c', 'd']
>>> y = []
>>> y.extend(v for z in ('a', 'b\nc', 'd') for v in z.splitlines())
>>> y
['a', 'b', 'c', 'd']
>>> y = []
>>> y.extend(chain.from_iterable(z.splitlines() for z in ('a', 'b\nc', 'd')))
>>> y
['a', 'b', 'c', 'd']