Python でリストのリストをフラット化する方法
Python でリストのリストをフラット化する方法を学びます。入れ子になったリストの内包表記、itertools.chain、sum、および再帰メソッドをコード例と比較します。
概要
行列計算、データベース行、または解析されたデータ ツリーを操作する場合、リストのリスト `[[1, 2], [3, 4]]` などの入れ子構造に頻繁に遭遇します。この構造をフラット化するということは、すべての個別の要素を含む 1 次元のリスト、つまり `[1, 2, 3, 4]` に変換することを意味します。 Python では、これを実現するためのエレガントな方法がいくつか提供されています。
リストのリストを平坦化する最も一般的でPython的な方法は、入れ子になったリスト内包表記「[サブリストの項目に対する行列のサブリストの項目]」を使用することです。ループがネストされた `for` ループと同じ順序で記述されているため、この構文は最初は直感に反して見えるかもしれませんが、高度に最適化されており、高速であり、外部ライブラリをインポートする必要はありません。
あるいは、「itertools」モジュールの「chain.from_iterable()」関数を使用することもできます。これは、メモリ内の新しいリストをすぐに割り当てるのではなく、要素を遅延して生成する反復子を返すため、最もメモリ効率の高いアプローチです。深くネストされたリスト (任意の深さ) の場合は、すべてのレベルをアンパックするための再帰ジェネレーター関数を作成する必要があります。
コードと実行の出力
このスクリプトは、リスト内包表記、itertools.chain、および再帰的アンパックを使用してリストのリストをフラット化する方法を示します。
import itertools
matrix = [[1, 2, 3], [4, 5], [6, 7, 8]]
# Method 1: List comprehension (Pythonic and fast)
flat_comp = [item for sublist in matrix for item in sublist]
print("List comprehension:", flat_comp)
# Method 2: itertools.chain (Highly memory efficient)
flat_chain = list(itertools.chain.from_iterable(matrix))
print("itertools.chain:", flat_chain)
# Method 3: Recursive function for deep/irregular nesting
irregular = [1, [2, 3], [[4, 5], 6]]
def flatten_deep(items):
result = []
for item in items:
if isinstance(item, list):
result.extend(flatten_deep(item))
else:
result.append(item)
return result
print("Deep flatten:", flatten_deep(irregular))List comprehension: [1, 2, 3, 4, 5, 6, 7, 8]
itertools.chain: [1, 2, 3, 4, 5, 6, 7, 8]
Deep flatten: [1, 2, 3, 4, 5, 6]段階的な実装
- フラット 2D 構造には、ネストされたリストの内包表記 [nested_list のサブリストの項目、サブリストの項目] を使用します。
- itertools をインポートし、遅延的でメモリに優しい評価を行うために itertools.chain.from_iterable(nested_list) を呼び出します。
- isinstance(item, list) をチェックする再帰関数を定義して、任意にネストされたコレクションを処理します。
よくある質問
sum() 関数を使用してリストを平坦化できますか?
はい、sum(matrix, []) は機能しますが、あまりお勧めしません。追加するたびに新しいリストのコピーが作成されるため、O(N^2) の複雑さで実行され、大規模なデータセットではひどいパフォーマンスが発生します。
リストのリストをフラット化する最速の方法は何ですか?
通常は itertools.chain.from_iterable() が最も高速で、次にネストされたリスト内包表記が続きます。
関連トピック
推奨される Python リソース
関連するインタラクティブなチュートリアル、チートシート、コード比較で知識を深めてください。
Python の変数とデータ型の説明
Python 変数と主要なデータ型 (文字列、整数、浮動小数点数、ブール値) を理解します。 Python でのメモリ割り当ての完全な初心者ガイド。
Python リスト メソッドのチートシート
Python のリスト操作のクイック リファレンス ガイド。要素の追加、挿入、削除、並べ替え、スライスをマスターします。
Python と JavaScript: どちらのプログラミング言語が最適ですか?
Python と JavaScript の包括的な比較。構文の違い、パフォーマンス、使用例 (バックエンドとフロントエンド)、およびコーディング例を調べます。