15.1 タプルのコピーを作成する
さて、(tuples)は不変の要素のシーケンスだって知ってるよね。 不変性のために、タプルのコピーを作るのは重要じゃないように思えるかもしれない。 なぜなら、リストと違って、タプルは作成後に変更されないから。
でも、ある場合にはタプルのコピーを作る必要があるかもね、 特に、元のデータを変更せずにその一部のバージョンと作業したいときに。 これが主な方法だ:
直接代入
タプルのコピーを作成する最も簡単な方法は、直接代入を使うことだ。 これによって新しいタプルオブジェクトが作成されるけど、タプルは不変なので、両方のオブジェクトは同じデータを参照する。
original_tuple = (1, 2, 3, 4, 5)
copied_tuple = original_tuple
print(copied_tuple)
この場合、copied_tupleはoriginal_tupleと同じオブジェクトを参照するよ。
組み込み関数 tuple() の使用
タプルのコピーを作成する別の方法は、組み込みのtuple()関数を使うことだ。この関数は元のタプルの要素をコピーして新しいタプルを作成する。
original_tuple = (1, 2, 3, 4, 5)
copied_tuple = tuple(original_tuple)
print(copied_tuple)
この方法は、元のオブジェクトが他のイテラブルである可能性がある場合でも、新しいオブジェクトを作成したいときに特に便利だよ。
リストを通じて変換
時には、変更可能なリストとしてタプルのコピーを作成し、変更を加え、再びタプルに変換する必要があるかもしれない。
original_tuple = (1, 2, 3, 4, 5)
temp_list = list(original_tuple)
temp_list.append(6)
copied_tuple = tuple(temp_list)
print(copied_tuple)
この例では、最初にタプルをリストに変換して新しい要素を追加し、その後リストを再びタプルに変換するんだよ。
15.2 タプルの結合
リストとは異なり、タプルは作成後に変更できないけど、既存のものを結合して新しいタプルを作成することができる。タプルの結合は、さまざまなプログラミングシナリオで役立つ一般的な操作だ。
タプルを結合する主な方法
連結
二つ以上のタプルを結合する最も簡単な方法は、演算子 + を使うことだ。 この方法は元のタプルを連結した結果として新しいタプルを作成する。
tuple1 = (1, 2, 3)
tuple2 = (4, 5, 6)
combined_tuple = tuple1 + tuple2
print(combined_tuple)
この例では、combined_tupleは要素 (1, 2, 3, 4, 5, 6) を含むことになるよ。
整数での乗算
タプルに整数を掛けるために演算子*を使用することもできるよ。これにより、指定された回数タプルが繰り返され、新しいタプルが生成される。
tuple1 = (1, 2, 3)
multiplied_tuple = tuple1 * 3
print(multiplied_tuple)
ここで、multiplied_tupleは要素 (1, 2, 3, 1, 2, 3, 1, 2, 3) を含むことになるよ。
関数 itertools.chain
多数のタプルを結合するためには、itertoolsモジュールのchain関数を使用することができる。 これは、結合するタプルの数が事前にわからないときに便利だよ。
from itertools import chain
tuple1 = (1, 2, 3)
tuple2 = (4, 5, 6)
tuple3 = (7, 8, 9)
combined_tuple = tuple(chain(tuple1, tuple2, tuple3))
print(combined_tuple)
結果は (1, 2, 3, 4, 5, 6, 7, 8, 9) です。
15.3 ネストされたタプル
他のタプルを含むタプルは、ネストされたタプル (nested tuples) と呼ばれる。 ネストされたタプルは、特に多次元データや複雑な構造を表す必要がある場合に、データを整理し構造化する便利な方法を提供する。
タプルをネストして構造を作ることができる。これはデータを多次元構造に整理するのに便利です。 Pythonでネストされたタプルを作成することは、通常のタプルを作成するのと同じくらい簡単です。 ただ、1つのタプルを別のタプルに含めるだけです。
nested_tuple = ((1, 2, 3), (4, 5, 6), (7, 8, 9))
この例で、nested_tupleには3つのタプルが含まれ、それぞれが3つの要素を持っている。
通常のタプルからのネストされたタプルの作成例:
この例で、nested_tupleには3つのタプルが含まれ、それぞれが3つの要素を持っている。
tuple1 = (1, 2, 3)
tuple2 = (4, 5, 6)
nested_tuple = (tuple1, tuple2)
print(nested_tuple)
ここで、nested_tupleには ((1, 2, 3), (4, 5, 6)) が含まれる。
ネストされたタプルの要素へのアクセス
ネストされたタプルの要素へのアクセスは、多重インデックスを使用して行われる。最初に外側のタプルのインデックスを指定し、その後に内側のものを指定する。
nested_tuple = ((1, 2, 3), (4, 5, 6), (7, 8, 9))
# 2番目のネストされたタプルの要素5にアクセスする
element = nested_tuple[1][1]
print(element) # 出力: 5
多次元配列
ネストされたタプルはしばしば2次元または多次元配列を表すために使用される。例えば、データ表は各行が別個のタプルであるタプルのタプルとして表すことができる。
データの構造化
ネストされたタプルは、複数の場所の地理的座標(緯度と経度)などのデータを構造化するのに便利です:
locations = (("New York", (40.7128, -74.0060)),
("Los Angeles", (34.0522, -118.2437)),
("Chicago", (41.8781, -87.6298)))
GO TO FULL VERSION