ホームページ > バックエンド開発 > Python チュートリアル > Python でリストのリストを効率的にフラット化するにはどうすればよいですか?

Python でリストのリストを効率的にフラット化するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-12-30 18:14:10
オリジナル
460 人が閲覧しました

How Can I Efficiently Flatten a List of Lists in Python?

リストのリストのフラット化

リストのリストがあり、それを単一のフラットなリストに変換したいと考えています。たとえば、次のようなものがあるとします。

[
    [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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート