Pythonでタプルの隣接要素を乗算する方法(zipとジェネレータ式の活用)
リストやタプル内の隣接する要素同士を乗算したい場合、zipメソッド、tupleメソッド、そしてジェネレータ式を組み合わせることで、簡潔に実現できます。
使用する主な機能
zipメソッド
zipメソッドは、複数のイテラブル(反復可能オブジェクト)を引数として受け取り、それぞれの要素を対応するペアとして集約し、イテレータとして返します。これにより、元のシーケンスと「先頭要素を除いたシーケンス」をペアリングすることで、隣接する2つの要素を同時に取り出せます。
ジェネレータ式
ジェネレータは、イテレータを簡単に作成するための仕組みです。内部では__iter__()および__next__()メソッドが自動的に実装され、内部状態を保持しながら処理を進めます。返せる値がなくなった時点でStopIteration例外を発生させることで、反復処理を終了します。
サンプルコード
my_tuple_1 = (7, 8, 0 ,3, 45, 3, 2, 22)
print ("元のタプル : " )
print(my_tuple_1)
my_result = tuple(i * j for i, j in zip(my_tuple_1, my_tuple_1[1:]))
print("乗算後のタプル : ")
print(my_result)実行結果
元のタプル : (7, 8, 0, 3, 45, 3, 2, 22) 乗算後のタプル : (56, 0, 0, 135, 135, 6, 44)
コードの解説
- まずタプルを定義し、コンソールに表示します。
zip(my_tuple_1, my_tuple_1[1:])により、元のタプルとスライス[1:]で先頭要素を除外したタプルをペアリングします。これにより、「(7, 8)」「(8, 0)」「(0, 3)」といった隣接要素のペアが順に生成されます。- ジェネレータ式
i * j for i, j in ...で各ペアの要素同士を乗算し、その結果をtuple()でタプルに変換します。 - 計算結果は変数
my_resultに代入され、コンソールに出力されます。
補足
元のタプルの要素数が8個であるのに対し、結果は7個になります。これは隣接ペアの数が「要素数 − 1」となるためです。なお、この手法はタプルだけでなくリストにも同様に適用でき、NumPy配列を使えばさらに高速なベクトル化演算も可能です。
-
【初心者向け】Pythonでタプルをパック・アンパックする方法を徹底解説
Pythonには「タプル(tuple)」と呼ばれる、一度作成すると内容を変更できないイミュータブル(変更不可)なデータ型が用意されています。本記事では、Python 3.x以降を対象に、タプルのパッキング(詰め込み)とアンパッキング(取り出し)の基本的な使い方から、応用テクニックまでを実例とともにわかりやすく解説します。 タプルのパッキングとアンパッキングとは Pythonには、右辺の値を左辺の変数へ対応付ける非常に強力な代入機能があります。この対応付けによって、タプル内の複数の値を通常の変数へ展開することをアンパッキングと呼びます。逆に、通常の代入によって複数の値をひとつのタプルにまとめるこ
-
Pythonのタプルに要素を追加する方法【リスト変換と連結のテクニック】
Pythonのタプルは変更不可(イミュータブル)なオブジェクト Pythonのタプル(tuple)はイミュータブル(変更不可)なオブジェクトです。そのため、append()のような要素を追加・変更しようとする操作は許されず、直接実行するとエラーが発生します。 しかし、一度タプルをリストに変換して操作した後、再びタプルへ戻すという方法を使えば、結果的に「タプルへ要素を追加した状態」を実現できます。 タプルへの要素追加の手順 具体的には、以下の2つの組み込み関数を使用します。 list(): タプルをリストに変換する tuple(): リストをタプルに変換する まず list() 関数でタプ