【Python】先頭の要素が同じタプルを結合する方法
Pythonでは、先頭の要素が同じであるタプル同士を結合したいケースがあります。このような場合、シンプルな for ループと if 条件を組み合わせることで簡単に実現できます。また、要素を1つのリストにまとめる際には extend メソッドが便利です。
以下に具体的な実装例を示します。
サンプルコード
my_list = [(43, 15), (66, 98), (64, 80), (14, 9), (47, 17)]
print("The list is : ")
print(my_list)
my_result = []
for sub in my_list:
if my_result and my_result[-1][0] == sub[0]:
my_result[-1].extend(sub[1:])
else:
my_result.append([ele for ele in sub])
my_result = list(map(tuple, my_result))
print("The extracted elements are : ")
print(my_result)
実行結果
The list is : [(43, 15), (66, 98), (64, 80), (14, 9), (47, 17)] The extracted elements are : [(43, 15), (66, 98), (64, 80), (14, 9), (47, 17)]
この例では、各タプルの先頭要素がすべて異なるため、元のリストがそのまま出力されています。先頭要素が一致するデータがない場合、結合は行われません。
コードの解説
まず、タプルのリストを定義し、コンソールに表示します。
次に、結果を格納するための空のリスト
my_resultを用意します。タプルのリストを反復処理しながら、直前に追加した要素と現在のタプルの先頭要素が一致しているかどうかを確認します。
先頭要素が一致する場合は、
extendメソッドを使って、既存のリストに2番目以降の要素を追加します。一致しない場合は、そのタプルをリストに変換して新しい要素として追加します。
最後に、
map関数を使ってすべての要素を再びタプル形式に変換し、結果を出力します。
先頭要素が重複する場合の動作例
参考として、先頭要素が重複しているデータを渡した場合の挙動を見てみましょう。
my_list = [(43, 15), (43, 98), (64, 80), (64, 9), (47, 17)]
my_result = []
for sub in my_list:
if my_result and my_result[-1][0] == sub[0]:
my_result[-1].extend(sub[1:])
else:
my_result.append([ele for ele in sub])
my_result = list(map(tuple, my_result))
print(my_result)
[(43, 15, 98), (64, 80, 9), (47, 17)]
このように、先頭要素が 43 のタプルは (43, 15, 98) に、64 のタプルは (64, 80, 9) にそれぞれ結合されていることが確認できます。連続した同一キーのデータをグループ化したい場合などに、この手法が役立ちます。
-
【Python】リスト内のタプルからn番目の要素を取得する方法
Pythonのリストには、タプルを要素として格納することができます。本記事では、リスト内の各タプルからn番目の要素を取り出す方法を、具体的なサンプルコードと実行結果とともに解説します。 方法1:インデックスを使う リスト内包表記を使えば、forループでリストの各タプルを走査しながら、指定したインデックスの要素に直接アクセスできます。以下の例では、各タプルのインデックス1(2番目)の要素を取り出し、新しいリストに結果を格納しています。 サンプルコード Alist = [('Mon','3 pm',10),('Tue','12pm',
-
【Python入門】リスト内の各要素を繰り返し複製する3つの方法
Pythonでプログラミングをしていると、リスト内の各要素を繰り返し(複製して)新しいリストを作成したい場面があります。例えば、データの水増しやテスト用データの生成などがその一例です。本記事では、リストの要素をそれぞれ2回ずつ繰り返した新しいリストを作成する方法を、3つのアプローチに分けてわかりやすく解説します。方法1:ネストしたforループ(リスト内包表記)を使う最もシンプルで直感的な方法は、リスト内包表記にforループを組み合わせるやり方です。各要素に対して内側のループで2回出力することで、元の要素とその複製を順番に並べた新しいリストを生成できます。サンプルコード# 元のリスト listA