Pythonでリストのリスト(ネストされたリスト)をフラット化する3つの方法
Pythonでは、ネストされたリスト(リストの中にリストが入った構造)を1次元のフラットなリストへ変換する(フラット化する)方法がいくつかあります。本記事では、代表的な3つの手法をコード例とともに解説します。
方法1:入れ子のforループを使う
最もシンプルで直感的なのが、二重のループを使う方法です。外側のループで親リストからサブリストを1つずつ取り出し、内側のループでそのサブリストから要素を1つずつ取得します。そして、各要素をあらかじめ用意した空のリスト(flat)に追加していきます。
L1=[[1,2],[3,4,5],[6,7,8,9]]
flat=[]
for i in L1:
for j in i:
flat.append(j)
print(flat)
この方法は初心者にも分かりやすく、処理の流れを理解しやすいのがメリットです。
方法2:ジェネレータ関数を使う
次の方法は、yield文を持つジェネレータ関数を定義してイテレータを生成し、それをlist()でリストに変換するやり方です。大きなデータを扱う場合でもメモリ効率が良いのが特徴です。
def flatten(lst):
for i in lst:
for j in i:
yield j
L1=[[1,2,3],[4,5],[6,7,8,9]]
flat=flatten(L1)
print(list(flat))
方法3:itertools.chain()を使う(最もコンパクト)
最も簡潔に書けるのが、標準ライブラリitertoolsモジュールのchain.from_iterable()メソッドを使う方法です。わずか数行でネストされたリストを展開できます。
import itertools L1=[[1,2,3],[4,5],[6,7,8,9]] flat=itertools.chain.from_iterable(L1) print(list(flat))
実行結果
上記のどの方法を使っても、以下のようにすべての要素が並んだ1次元のリストが出力されます。
[1, 2, 3, 4, 5, 6, 7, 8, 9]
-
Pythonでリストから文字列を作成する方法|join()関数の使い方を解説
Pythonのjoin()関数とはPythonには、シーケンス型(リストやタプルなど)の要素を連結して1つの文字列を生成するための組み込みメソッド join() が用意されています。join()は区切り文字(セパレーター)を持つ文字列に対して呼び出し、各要素の間にその区切り文字を挿入しながら要素を連結します。区切り文字が不要な場合は、空文字列()を使って呼び出すことで、要素をそのまま連結した文字列を取得できます。区切り文字なしで連結する例以下の例では、文字1つずつを格納したリストを、空文字列を介して連結しています。>>> lst = [h, e, l, l, o]>&g
-
Pythonリスト入門:作成から操作、削除まで徹底解説
このチュートリアルでは、Pythonのリスト(List)について学びます。リストの作成方法、要素へのアクセス、要素の追加・削除、リスト自体の削除など、基本的な操作を一つずつ丁寧に解説していきます。 Pythonでは、リストは角括弧 [] を使って構築し、各要素はカンマ , で区切って記述します。 Pythonのリストは、異なる型のオブジェクトを混在させて格納できるのが特徴です。すべて文字列である必要も、整数である必要もありません。例えば、以下のように複数の型が混ざったリストを作成できます。mixedTypesList = [a, True, 1, 1.0] リストの作成方法 リストは、角括弧