PythonでPythonを扱う際、よくある状況があります。
リストのリストがあり、それを単一のリストにフラット化したい場合です。
問題
例を示します。
data = [[1, 2], [3, 4], [5, 6]]
期待される出力:
[1, 2, 3, 4, 5, 6]
シンプルな解決策:リスト内包表記
リストのリストをフラット化する最もPython的な方法は次のとおりです。
flattened = [item for sublist in data for item in sublist]
解説
これは入れ子になったリスト内包表記であり、機能的には次のものと等価です。
flattened = []
for sublist in data:
for item in sublist:
flattened.append(item)
しかし、はるかに簡潔な形式です。
代替案:itertools.chainの使用
より大きく、メモリを意識する必要があるデータセットの場合、Pythonの組み込みitertoolsモジュールを使用できます。
import itertools
flattened = list(itertools.chain.from_iterable(data))
このアプローチはイテレータを作成するため、大量のデータ処理を行う際に効率的です。
例
data = [['a', 'b'], ['c', 'd'], ['e']]
flattened = [item for sublist in data for item in sublist]
print(flattened)
# 出力: ['a', 'b', 'c', 'd', 'e']
ベストプラクティス
-
小規模から中規模のデータセットを扱う場合は、明確で簡潔なコードのためにリスト内包表記を使用してください。
-
大規模データまたはアイテムを遅延処理したい場合は、itertools.chainを使用してください。
このテクニックはクリーンなPython開発の定番であり、データ操作、Webスクレイピング、データパイプラインなどで広く使用されています。
![[TIPS] Python: Flatten a List of Lists in One Line](/_next/image?url=https%3A%2F%2Fcdn.glinteco.com%2Fuploads%2Flarge_tips_python_flatten_a_list_of_lists_in_one_line_5ae089c5a9.png&w=3840&q=100)

![[One Package Per Day] Poetry: Deterministic Dependency Management](/_next/image?url=https%3A%2F%2Fcdn.glinteco.com%2Fuploads%2Flarge_one_package_per_day_poetry_deterministic_dependency_management_6c0e1efe35.jpg&w=3840&q=75)
