Pythonでネストしたリスト(浅いリスト)をフラット化する方法
Pythonでは、リストの中にリストが入った「入れ子(ネスト)構造」のデータを、1次元のフラットなリストに変換したい場面がよくあります。この記事では、浅い階層のリストをフラット化する代表的な方法を、具体的なコード例とともに紹介します。
方法1:ネストしたforループを使う
最もシンプルで直感的なのは、2重のforループを使ってサブリストから要素を1つずつ取り出し、空のリストへ順番に追加していく方法です。処理の流れが分かりやすいため、Python初心者にもおすすめのアプローチです。
lst = [[10, 20, 30, 40], [50, 60, 70, 80], [90, 100, 110, 120]]
flatlist = []
for sublist in lst:
for item in sublist:
flatlist.append(item)
print (flatlist)
実行すると、すべての要素が1つのリストにまとめられます。
[10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120]
方法2:itertools.chain()を使う
より簡潔で「Pythonic」な書き方として、標準ライブラリitertoolsモジュールのchain()関数を利用する方法があります。アスタリスク(*)でリストを展開して引数に渡すことで、複数のサブリストを1つに連結できます。
>>> lst = [[10, 20, 30, 40], [50, 60, 70, 80], [90, 100, 110, 120]] >>> import itertools >>> flatlist = list(itertools.chain(*lst)) >>> flatlist [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120]
chain()はイテレータを返すため、list()で明示的にリストへ変換する点に注意してください。内部で遅延評価を行うため、大きなデータを扱う場合でもメモリ効率に優れているのが特徴です。
補足:リスト内包表記でも1行で書ける
上記の2重ループは、リスト内包表記を使えば1行にまとめることも可能です。
flatlist = [item for sublist in lst for item in sublist]
いずれの方法でも結果は同じですが、可読性・処理速度・コードの簡潔さのバランスを考慮して、用途に応じて使い分けるとよいでしょう。
-
Pythonでリストから要素をランダムに選択する方法【choice()とrandrange()の使い方】
Pythonでリストからランダムに要素を選ぶ基本Pythonの標準ライブラリにはrandomモジュールが用意されており、これを使うことでシンプルなコードでリストから要素をランダムに取得できます。randomモジュールは、メルセンヌ・ツイスターアルゴリズムに基づくさまざまな擬似乱数生成機能を提供しています。本記事では、代表的な2つの方法——choice()関数とrandrange()関数を使った手法を紹介します。方法1:choice()関数を使う(最も簡単)randomモジュールにはchoice()メソッドがあり、文字列・リスト・タプルなどのシーケンス型データから1つの要素をランダムに選択できま
-
Pythonで文字列のリストを並べ替える方法:sort()とsorted()の使い分け
Pythonでは、文字列のリストを並べ替える方法が2つ用意されています。リスト自体を直接変更するsort()メソッドと、元のリストを保持したまま新しい並べ替え済みリストを作成するsorted()関数です。それぞれの特徴と使い方を解説します。 sort()メソッドでリストをその場で並べ替える sort()は、リストそのものを並べ替える「in-place(破壊的)」な操作です。元のリストの順序が直接変更されるため、戻り値を受け取る必要はありません。 >>> a = [Hello, My, Followers] >>> a.sort() >>>