概要
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.reduce
とoperator.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()
が最も効果的で、特に後者は大規模なリストでのパフォーマンスに優れています。状況に応じて適切な方法を選び、効率的なリスト操作を行いましょう。