、このスニペット:.extendリストメソッドでリスト内包を使用するには?例えば
out = []
for foo in foo_list:
out.extend(get_bar_list(foo)) # get_bar_list return list with some data
return out
リストの内包を使用してこのコードを短くする方法は?
、このスニペット:.extendリストメソッドでリスト内包を使用するには?例えば
out = []
for foo in foo_list:
out.extend(get_bar_list(foo)) # get_bar_list return list with some data
return out
リストの内包を使用してこのコードを短くする方法は?
とはitertools.chain
でそれを消費:
from itertools import chain
out = list(chain.from_iterable(get_bar_list(foo) for foo in foo_list))
リストの長さが小さい場合は、代わりにジェネレータ式を合計するとことを行うことができます。
sum((get_bar_list(foo) for foo in foo_list), [])
nested list comprehensionをより効率的に、あまり読みやすいです。
:、私はいつも苦労を思い出してい
out = [foo for sub_item in foo_list for foo in get_bar_list(sub_item)]
FWIWをネストされたリスト内包のために何が入ってくるのかを正確に調べるために、私は通常itertools.chain
(Mosesの答えにあるように)を使うことを好みます。あなたが本当にネストされたリスト内包表記を愛し場合は、順序があなたが(リストの内包の最初の発現に利用可能な最も内側のループ変数で)通常のループでそれらに遭遇するのと同じです:
for sub_item in foo_list:
for foo in get_bar_list(sub_item):
out.append(foo)
関連、重複しない場合:http://stackoverflow.com/q/952914/1639625 –
@parsenzいいえ、これは、OPがフラットリストを探している間、リストのリストを作成するためです。 – Delgan