Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonでタプルの列ごとの合計を求める方法【for文・zip・map活用】

Pythonは、多彩なライブラリと組み込み関数が充実していることから、データ分析の分野で絶大な人気を誇ります。データ分析を進めていると、複数のタプルからなるリストに対して、同じ位置(同じ列)にある値をまとめて合計したい場面に遭遇することがあります。

本記事では、一連のタプルの中から同一列に存在する値をすべて加算し、その結果を新しいタプルとして取得する方法を解説します。

方法1:for文とzip()を組み合わせる

まず紹介するのは、for文を使って各要素を順番に処理し、zip関数で各列の値をまとめる方法です。zip(*data)によって転置のようにデータを組み替えることで、同じ位置の値同士がグループ化されます。その後、sum関数で合計を計算し、最終的な結果を新しいタプルのリストとして取得します。

コード例

data = [[(3, 92), (21, 4), (15, 6)], [(25, 62), (12, 7), (15, 7)]]

print("タプルのリスト: " + str(data))
# リスト内包表記 + zip() を使用
result = [tuple(sum(m) for m in zip(*n))
          for n in zip(*data)]
print("タプルの列ごとの合計: " + str(result))

実行結果

上記のコードを実行すると、以下の出力が得られます。

タプルのリスト: [[(3, 92), (21, 4), (15, 6)], [(25, 62), (12, 7), (15, 7)]]
タプルの列ごとの合計: [(28, 154), (33, 11), (30, 13)]

方法2:map()とzip()を組み合わせる

次に、for文を使わずにmap関数を利用する方法を見ていきましょう。map(sum, zip(*n))とすることで、各列の値の合計計算を簡潔に記述できます。処理の流れとしては、まずzip(*data)で列単位にデータをまとめ、さらに内側のzip(*n)で各位置の値を集約したうえで、map関数によりsumを適用しています。

コード例

data = [[(3, 92), (21, 4), (15, 6)], [(25, 62), (12, 7), (15, 7)]]

print("タプルのリスト: " + str(data))
# zip() + map() を使用
result = [tuple(map(sum, zip(*n)))
          for n in zip(*data)]
print("タプルの列ごとの合計: " + str(result))

実行結果

こちらのコードも、先ほどとまったく同じ結果が出力されます。

タプルのリスト: [[(3, 92), (21, 4), (15, 6)], [(25, 62), (12, 7), (15, 7)]]
タプルの列ごとの合計: [(28, 154), (33, 11), (30, 13)]

まとめ

どちらの方法でも、出力結果は [(28, 154), (33, 11), (30, 13)] となり、各列の値が正しく合計されていることが確認できます。for文とリスト内包表記を使う方法は処理の流れが直感的に理解しやすく、map関数を使う方法はより簡潔に関数型スタイルで記述できるのが特徴です。状況や好みに応じて使い分けるとよいでしょう。

  1. Pythonのzip()関数の使い方を徹底解説!複数のイテラブルをまとめて処理する方法

    zip() 関数は、複数のイテレータ(イテラブル)をまとめてグループ化するために使われる組み込み関数です。この記事では、zip() の基本的な使い方から、展開(アンジップ)のテクニック、実践的な活用例まで詳しく解説します。zip()関数のドキュメントを確認するまずは help() メソッドを使って、zip() 関数の公式ドキュメントを見てみましょう。以下のコードを実行してください。コード例help(zip)上記のプログラムを実行すると、次のような結果が表示されます。出力結果Help on class zip in module builtins: class zip(object) |

  2. Pythonタプル(tuple)入門:作成・操作・削除の基本をコード例で解説

    Pythonにおけるタプル(tuple)は、順序付け(ordered)かつ変更不可(immutable)という特徴を持つコレクションです。変更不可であるため、一度作成したタプルに要素を追加したり削除したりすることはできません。 タプルは丸括弧 () と、最低1つのカンマ , を使って作成します。 また、タプルはリストと同じようにインデックス指定やスライシングが可能ですが、スライスの結果もタプルとして返される点に注意しましょう。 タプルの作り方 colorsTuple = (red, green, blue) print(colorsTuple) 実行結果: (red, green, blue