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

Pythonでネストしたタプルの要素ごとの積を計算する方法(zipとジェネレータ式)

ネストしたタプル(タプルの中にタプルが入った構造)の各要素同士を掛け合わせた「累積列積」を求めたい場合、「zip」メソッドとネストしたジェネレータ式を組み合わせることで、シンプルかつ効率的に実現できます。

ジェネレータとzipメソッドの基礎知識

ジェネレータは、イテレータを簡潔に作成するための仕組みです。内部的には「__iter__()」メソッドと「__next__()」メソッドを持つクラスが自動的に実装され、内部状態も自動的に管理されます。また、返すべき値がなくなった時点では「StopIteration」例外が発生する仕組みになっています。

一方、zipメソッドは、複数のイテラブル(反復可能オブジェクト)を受け取り、それぞれの要素を対応づけてタプルとしてまとめ、その結果を返す組み込み関数です。

コード例

以下に、実際のコード例を示します。

tuple_1 = ((11, 23), (41, 25), (22, 19))
tuple_2 = ((60, 73), (31, 91), (14, 14))

print("最初のタプル : ")
print(tuple_1)
print("2番目のタプル : ")
print(tuple_2)

my_result = tuple(tuple(a * b for a, b in zip(tup_1, tup_2))
    for tup_1, tup_2 in zip(tuple_1, tuple_2))

print("乗算後のタプル : ")
print(my_result)

出力結果

最初のタプル :
((11, 23), (41, 25), (22, 19))
2番目のタプル :
((60, 73), (31, 91), (14, 14))
乗算後のタプル :
((660, 1679), (1271, 2275), (308, 266))

処理の流れの解説

  • まず、2つのネストしたタプル(タプルのタプル)を定義し、コンソールに表示します。
  • 外側のzipで2つのタプルを対応づけて繰り返し処理を行い、さらに内側のzipで各要素同士を取り出して乗算します。
  • 計算結果をtuple()でタプルに変換し、変数「my_result」に代入します。
  • 最後に、この変数の内容をコンソールに出力します。

このように、ジェネレータ式とzipを組み合わせれば、for文を多用せずとも簡潔な記述でネストしたデータ構造の要素ごとの演算を実現できます。リスト内包表記でも同様の処理は可能ですが、大量のデータを扱う場合はジェネレータの方がメモリ効率に優れているというメリットがあります。

  1. Pythonでタプルからネストされたタプル(レコード)を削除する方法

    Pythonでは、タプルの中に含まれるネストされたタプル(入れ子のレコード)を取り除きたいケースがあります。そのような場合、シンプルなforループと、組み込みメソッドである「isinstance」および「enumerate」を組み合わせることで、簡単に実現できます。 「enumerate」メソッドは、指定したイテラブル(反復可能オブジェクト)に対してカウンター(インデックス番号)を付与し、それを返すメソッドです。一方、「isinstance」メソッドは、引数として渡されたオブジェクトが特定のデータ型に属しているかどうかを判定するために使用されます。 以下に具体的な実装例を示します。 サンプルコ

  2. Pythonのタプルアンパックとは?仕組みと使い方を実例付きで解説

    タプルのアンパック(unpacking)を理解する前に、まず「タプル」とは何かをおさえておきましょう。 タプルとは タプルとは、Pythonでイミュータブル(変更不可)なオブジェクトを格納するためのデータ構造です。タプルは複数の要素を順序付けて保持するシーケンス型の一種で、一度作成すると要素の追加・削除・変更ができません。リストとの大きな違いは、この「変更不可」である点と、丸括弧 () を使って定義する点にあります。 パッキングとアンパックの関係 タプルには「パッキング」と「アンパック」という2つの操作があります。 パッキング(packing):複数の値を1つの新しいタプルにまとめて格