Pythonでタプルのリストからタプルを組み合わせる方法
データ分析では、Pythonが提供するさまざまなデータ構造を組み合わせて扱うことがよくあります。リストにはタプルを要素として格納できるため、「リストの中にタプルがある」という構造も簡単に作れます。本記事では、タプルの各要素を別の要素と組み合わせて、新しい「タプルの組み合わせリスト」を生成する方法を、具体的なコード例とともに解説します。
方法1:forループ(リスト内包表記)を使う
まずは最も基本的な方法です。リスト内包表記の中でforループをネストし、各タプルからリスト部分の要素を1つずつ取り出しながら、同じタプル内のもう1つの要素(ここでは曜日の文字列)とペアを作成していきます。
コード例
Alist = [([2, 8, 9], 'Mon'), ([7, 5, 6], 'Wed')]
# 元となるタプルのリスト
print("List of tuples : \n", Alist)
# タプルのリスト内で要素を組み合わせる
res = [(t1, t2) for i, t2 in Alist for t1 in i]
# 結果を出力
print("The list tuple combination : \n", res)実行結果
上記のコードを実行すると、次のような出力が得られます。
List of tuples : [([2, 8, 9], 'Mon'), ([7, 5, 6], 'Wed')] The list tuple combination : [(2, 'Mon'), (8, 'Mon'), (9, 'Mon'), (7, 'Wed'), (5, 'Wed'), (6, 'Wed')]
出力を見ると、各リストの数値がそれぞれ対応する曜日とペアになったタプルが生成されていることがわかります。リスト内包表記は簡潔で可読性も高いため、この種の変換には非常に便利です。
方法2:itertools.productを使う
標準ライブラリのitertoolsモジュールには、引数として渡された複数のイテラブルのデカルト積(直積)を生成するproductという関数があります。これを利用すると、タプル内のリスト要素と、リスト以外の要素とのすべての組み合わせを効率的に作成できます。
コード例
from itertools import product
Alist = [([2, 8, 9], 'Mon'), ([7, 5, 6], 'Wed')]
# 元となるタプルのリスト
print("List of tuples : \n", Alist)
# タプルのリスト内で要素を組み合わせる
res = [x for i, j in Alist for x in product(i, [j])]
# 結果を出力
print("The list tuple combination : \n", res)実行結果
上記のコードを実行すると、次のような出力が得られます。
List of tuples : [([2, 8, 9], 'Mon'), ([7, 5, 6], 'Wed')] The list tuple combination : [(2, 'Mon'), (8, 'Mon'), (9, 'Mon'), (7, 'Wed'), (5, 'Wed'), (6, 'Wed')]
product(i, [j])は、リストiの各要素と要素jとのすべてのペアを生成します。forループ版とまったく同じ結果になりますが、itertoolsを使うことで処理の意図が明確になり、大規模なデータでも高速に動作するというメリットがあります。
まとめ
タプルのリストから要素同士を組み合わせた新しいタプルのリストを作るには、①リスト内包表記でforループをネストする方法と、②itertools.productで直積を生成する方法の2つが有効です。どちらも同じ結果が得られるため、コードの可読性や処理速度の要件に応じて使い分けるとよいでしょう。
-
なぜPythonはリスト内のリストではなく「リスト内のタプル」を返すのか?その理由を解説
Pythonでデータベースを操作したり、ライブラリからデータを取得したりすると、「リストの中にタプルが入った構造」が返ってくることがよくあります。「なぜ普通のリストではなく、わざわざタプルなのか?」と疑問に思ったことはありませんか?この記事では、その理由を分かりやすく解説します。 1. 返却されたデータは「変更しない」ことが前提だから 最大の理由は、Pythonが返却するデータはミュータブル(変更可能)にしないことを期待している点にあります。タプルはイミュータブル(不変)なデータ型であり、一度作成すると内容を書き換えることができません。 関数やライブラリがデータを返すとき、それはあくまで「読
-
Pythonタプル(tuple)入門:作成・操作・削除の基本をコード例で解説
Pythonにおけるタプル(tuple)は、順序付け(ordered)かつ変更不可(immutable)という特徴を持つコレクションです。変更不可であるため、一度作成したタプルに要素を追加したり削除したりすることはできません。 タプルは丸括弧 () と、最低1つのカンマ , を使って作成します。 また、タプルはリストと同じようにインデックス指定やスライシングが可能ですが、スライスの結果もタプルとして返される点に注意しましょう。 タプルの作り方 colorsTuple = (red, green, blue) print(colorsTuple) 実行結果: (red, green, blue