Pythonでタプルのリストをフラットなリストに変換する方法
Pythonを扱っていると、リストの要素がタプルになっているデータに出会うことがあります。しかし、その後のデータ処理を行いやすくするためには、タプルを展開して通常のリスト要素へ変換したいケースが多くあります。本記事では、タプルのリストをフラットなリストに変換する代表的な3つの方法を、サンプルコードとともにわかりやすく解説します。
方法1: リスト内包表記を使う
最もシンプルでPythonらしいのがリスト内包表記です。ネストしたforループを使って、各タプルの中身を1つずつ取り出し、新しいリストとして生成します。タプルごとの要素数が異なっていても問題なく処理できるのが特徴です。
サンプルコード
listA = [('Mon', 3), ('Wed', 4), ('Fri', 7, 'pm')]
# 元のリスト
print("Given list : \n", listA)
res = [item for t in listA for item in t]
# 結果
print("Final list: \n", res)実行結果
上記のコードを実行すると、次のような出力が得られます。
Given list :
[('Mon', 3), ('Wed', 4), ('Fri', 7, 'pm')]
Final list:
['Mon', 3, 'Wed', 4, 'Fri', 7, 'pm']方法2: itertools.chain を使う
標準ライブラリの itertools.chain メソッドと * 演算子(アンパック演算子)を組み合わせる方法もあります。* 演算子によってタプルのリストから各タプルを取り出し、chainメソッドがそれらを一連の要素として連結します。大量のデータを扱う場合にも効率的に動作するのがメリットです。
サンプルコード
import itertools
listA = [('Mon', 3), ('Wed', 4), ('Fri', 7, 'pm')]
# 元のリスト
print("Given list : \n", listA)
res = list(itertools.chain(*listA))
# 結果
print("Final list: \n", res)実行結果
上記のコードを実行すると、次のような出力が得られます。
Given list :
[('Mon', 3), ('Wed', 4), ('Fri', 7, 'pm')]
Final list:
['Mon', 3, 'Wed', 4, 'Fri', 7, 'pm']方法3: reduce と concat を使う
functoolsモジュールの reduce 関数と operatorモジュールの concat 関数を組み合わせるアプローチもあります。reduce関数がリストの各要素(タプル)に対して順番に連結処理を適用していき、最終的にすべての要素を含む単一のリストを作り出します。
サンプルコード
import operator
from functools import reduce
listA = [('Mon', 3), ('Wed', 4), ('Fri', 7, 'pm')]
# 元のリスト
print("Given list : \n", listA)
res = (list(reduce(operator.concat, listA)))
# 結果
print("Final list: \n", res)実行結果
上記のコードを実行すると、次のような出力が得られます。
Given list :
[('Mon', 3), ('Wed', 4), ('Fri', 7, 'pm')]
Final list:
['Mon', 3, 'Wed', 4, 'Fri', 7, 'pm']まとめ
どの方法でも同じ結果が得られますが、用途に応じて使い分けるのがおすすめです。
- リスト内包表記: 可読性が高く、追加のインポート不要。小〜中規模のデータに最適。
- itertools.chain: パフォーマンスに優れ、大規模データやイテレータ処理に向いている。
- reduce + concat: 関数型プログラミングのスタイル。他のreduce処理と組み合わせたい場合に有効。
日常的なコードでは、シンプルさと可読性のバランスからリスト内包表記かitertools.chainを選ぶことが多いでしょう。
-
Pythonで文字のリストを文字列に変換する方法を解説
Pythonでは、リスト内の個々の要素をひとつの文字列にまとめたい場面がよくあります。たとえば、データを保存したり送信したりする際に必要となるシリアライズ(直列化)の処理では、このような変換が非常に役立ちます。具体的には、次のような変換を指します。[h, e, l, l, o, , w, o, r, l, d] → hello worldjoinメソッドを使った変換Pythonには、このような変換を実現するためのjoin()メソッドが標準で用意されています。joinメソッドは、区切り文字(デリミタ)として使う文字列に対して呼び出し、引数に渡したリストの各要素を連結します。今回は各文字をつなげ
-
Pythonでリストをタプルに変換する方法
Pythonでは、リストをタプルに変換するのは非常に簡単です。組み込み関数である tuple() 関数にリストを引数として渡すだけで、変換することができます。サンプルコードmy_list = [1, 2, 3] my_tuple = tuple(my_list) print(my_tuple)出力結果上記のコードを実行すると、以下のような出力が得られます。(1, 2, 3)解説tuple() 関数は、リストだけでなく文字列や辞書などのイテラブル(反復可能なオブジェクト)もタプルに変換できます。タプルはリストと異なりイミュータブル(変更不可)であるため、データを誤って書き換えたくない場合や、辞書