Pythonでリストのリストからフラットなリストを作成する方法
フラットリストとは
各要素がそれ自体リストになっているようなリストオブジェクトから、すべてのサブリストの要素を取り出して1つのリストにまとめたものをフラットリストと呼びます。
例えば、次のようなネストされた(入れ子になった)リストがあるとします。
nested_list = [[1, 2, 3], [4, 5], [6, 7, 8, 9]]
これをフラット化すると、以下のような1次元のリストになります。
flat_list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
ここでは、Pythonでリストのリストをフラット化する代表的な方法をいくつか紹介します。
方法1:リスト内包表記を使う
最もシンプルで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]
読みやすく、追加のインポートも不要なため、多くの場面で第一候補になります。
方法2:itertools.chain() を使う
標準ライブラリの itertools.chain.from_iterable() を使うと、複数のイテラブルを効率的に連結できます。
from itertools import chain
nested_list = [[1, 2, 3], [4, 5], [6, 7, 8, 9]]
flat_list = list(chain.from_iterable(nested_list))
print(flat_list)
# 出力: [1, 2, 3, 4, 5, 6, 7, 8, 9]
要素数が多い大きなデータセットでは、この方法が最も高速です。
方法3:sum() 関数を使う
sum() の第2引数に空のリストを渡すことで、リスト同士を連結できます。
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]
ただし、sum() は連結を繰り返すため計算量が O(n²) となり、大きなリストでは非効率です。小規模なリスト向けの簡潔な書き方と覚えておきましょう。
方法4:ループと extend() を使う
初心者にも分かりやすいのが、通常のforループと extend() メソッドを組み合わせる方法です。
nested_list = [[1, 2, 3], [4, 5], [6, 7, 8, 9]]
flat_list = []
for sublist in nested_list:
flat_list.extend(sublist)
print(flat_list)
# 出力: [1, 2, 3, 4, 5, 6, 7, 8, 9]
まとめ
リストのリストをフラット化する主な方法は以下の通りです。
- リスト内包表記:簡潔で可読性が高く、汎用的に使える
- itertools.chain.from_iterable():大規模データで最速
- sum(list, []):短く書けるが、大きなリストでは遅い
- forループ + extend():処理の流れが直感的で分かりやすい
用途やデータサイズに応じて最適な方法を選択してください。
-
Pythonのリストからカンマ区切りの文字列を作成する方法
Pythonのjoin()メソッドとはPythonには、リストやタプルといったシーケンスオブジェクトの要素を、指定した区切り文字で連結して1つの文字列として返す組み込みのjoin()メソッドが用意されています。区切り文字が不要な場合は空文字列()を、カンマ区切りの文字列を作成したい場合は「,」をあらかじめ変数に設定しておきます。基本的な使い方次の例では、文字のリストをカンマ区切りの文字列に変換しています。>>> lst = [h, e, l, l, o]>>> sep = ,>>> sep.join(lst)h,e,l,l,oこのように、区
-
Pythonリスト入門:作成から操作、削除まで徹底解説
このチュートリアルでは、Pythonのリスト(List)について学びます。リストの作成方法、要素へのアクセス、要素の追加・削除、リスト自体の削除など、基本的な操作を一つずつ丁寧に解説していきます。 Pythonでは、リストは角括弧 [] を使って構築し、各要素はカンマ , で区切って記述します。 Pythonのリストは、異なる型のオブジェクトを混在させて格納できるのが特徴です。すべて文字列である必要も、整数である必要もありません。例えば、以下のように複数の型が混ざったリストを作成できます。mixedTypesList = [a, True, 1, 1.0] リストの作成方法 リストは、角括弧