リストのリストのフラット化
リストのリストがあり、それを単一のフラットなリストに変換したいと考えています。たとえば、次のようなものがあるとします。
[ [1, 2, 3], [4, 5, 6], [7], [8, 9] ]
そして次のものを取得することを目標とします。
[1, 2, 3, 4, 5, 6, 7, 8, 9]
解決策
ネストされたリストの内包表記は、エレガントなリストのリストをフラット化するための解決策:
flat_list = [x for xs in xss for x in xs]
このコードxss とその要素の各サブリストを反復処理し、結果を flat_list に蓄積します。
あるいは、結合を伴うリスト内包表記を使用してフラット化することも、sum() 関数を使用することもできます:
flat_list = [j for i in xss for j in i] flat_list = sum(xss, []) # or sum(xss)
パフォーマンスの比較
これらのメソッドは同等の機能を提供します結果として、そのパフォーマンスは異なります。ベンチマークでは、入れ子になったリスト内包が、特に大規模な入力リストの場合、他のアプローチよりも大幅に高速であることが示されています。
この優れたパフォーマンスは、リスト内包が 1 つのリストを 1 回生成し、各項目を 1 回だけコピーするという事実から生じています。対照的に、結合ベースの方法では多数の中間リストが作成されますが、sum() アプローチではより複雑な操作が必要になります。
再帰的アプローチ
リストのリストの場合ネストの深さが任意であるため、完全に平坦化するには再帰的アプローチが必要になる場合があります。次の関数を考えてみましょう:
def flatten_completely(xss): return [x for elem in xss for x in flatten_completely(elem) if not isinstance(x, list)] if isinstance(xss, list) else [xss]
以上がPython でリストのリストを効率的にフラット化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。