概要

Pythonでネストされたリストをフラットにする方法はいくつかあります。この記事では、リスト内包表記とitertools.chainを使用した効率的な方法について説明します。これらの手法は、リストがネストされている場合でも、一度にすべての要素をフラット化し、一つのリストにまとめることができます。

リスト内包表記によるフラット化

リスト内包表記はPythonのリスト操作で非常に便利な手法です。ネストされたリストを一つのリストにするには、次のように書きます。

nested_list = [[1, 2, 3], [4, 5, 6], [7], [8, 9]]
flat_list = [item for sublist in nested_list for item in sublist]
print(flat_list)  # 出力: [1, 2, 3, 4, 5, 6, 7, 8, 9]

この方法はシンプルで読みやすく、リストが一段階ネストされている場合に最適です。

itertools.chainを使った方法

もう一つの方法として、Python標準ライブラリのitertools.chainを使うことで、より効率的にフラット化できます。

import itertools
nested_list = [[1, 2, 3], [4, 5, 6], [7], [8, 9]]
flat_list = list(itertools.chain.from_iterable(nested_list))
print(flat_list)  # 出力: [1, 2, 3, 4, 5, 6, 7, 8, 9]

この方法は、特に大きなリストや多数のネストがある場合に有効で、パフォーマンスも良好です。

その他の方法とパフォーマンス比較

ネストされたリストをフラット化する他の方法としては、sum()を使うものや、functools.reduceoperator.concatを使う方法もありますが、これらはパフォーマンス面で劣ることが多いです。特に、sum()を使った方法は、計算量がリストの長さに応じて二次的に増加するため、避けるべきです。

sum()を使う方法

nested_list = [[1, 2, 3], [4, 5, 6], [7], [8, 9]]
flat_list = sum(nested_list, [])
print(flat_list)  # 出力: [1, 2, 3, 4, 5, 6, 7, 8, 9]

この方法はシンプルに見えますが、大規模なリストではパフォーマンスが低下します。

まとめ

Pythonでリストをフラット化するには、リスト内包表記やitertools.chain.from_iterable()が最も効果的で、特に後者は大規模なリストでのパフォーマンスに優れています。状況に応じて適切な方法を選び、効率的なリスト操作を行いましょう。