生成AIと学ぶPython5: Pythonの型(タプル型)
次は、タプルについて説明します。
タプルはリストと非常に似ています。
ただ、使い方は若干異なります。
タプルの作成方法
pythonのタプルは、tuple_a = ()のように、丸括弧を利用して宣言します。
タプルの大きな特徴は、イミュータブルであることです。
イミュータブルとは、値の変更ができないということで、配列のようにN番目の要素を削除したり更新することができません。
そして、タプルの値を更新するには、新たなタプルとして作成しなければいけません。
そのため、タプルは宣言したのち値を変更せずに、定数のように用いる場合に用いることが多いです。
タプルの作成方法
tup1 = ('physics', 'chemistry', 1997, 2000)
tup2 = (1, 2, 3, 4, 5 )
tup3 = "a", "b", "c", "d"
tup1 = () # 空のタプルの作成
タプルへのアクセス方法
タプルへのアクセスは、リストと似ています。
tuple_a = ('apple', 'banana', 'orange', 'lemon') # タプルを作成
print(tuple_a[0]) # タプルの一番目の要素にアクセス。appleと表示
tuple_a[0] = 'grape' # TypeError。tupleは変更できない。
tuple_a[0:3] # 0番目から2番目まで取り出す(apple, banana, orange)
タプルを用いたいろんな処理
タプルの要素数の取得
len関数を使うことで、タプルの要素数を取得できます。
my_tuple = (1, 2, 3, 4, 5)
length = len(my_tuple)
print(length) # 結果: 5
タプルの結合
タプルを結合するには、+を使います。
tuple1 = (1, 2, 3)
tuple2 = (4, 5, 6)
combined_tuple = tuple1 + tuple2
print(combined_tuple) # 結果: (1, 2, 3, 4, 5, 6)
タプルの繰り返し処理
*演算子を使用すると繰り返し処理ができます。タプルを指定された回数だけ繰り返して、新しいタプルを作成できます。
my_tuple = (1, 2, 3)
repeated_tuple = my_tuple * 3
print(repeated_tuple) # 結果: (1, 2, 3, 1, 2, 3, 1, 2, 3)
タプルのアンパック
タプルを複数の変数に代入することができます。この際には、要素数と変数の数が一致するようにしましょう。
my_tuple = (1, 2, 3)
a, b, c = my_tuple
print(a, b, c) # 結果: 1 2 3
タプルを使った関数の戻り値の取り扱い
関数がタプルを返す場合、アンパックを使用して戻り値を複数の変数に代入できます。
def get_name_and_age():
return ("Alice", 30)
name, age = get_name_and_age()
print(name, age) # 結果: Alice 30
タプルを使ったディクショナリのキー
タプルはイミュータブルなため、ディクショナリのキーとして使用できます。
リストは、ミュータブルで変更可能なため、キーとしては利用できません。
coordinates = {(0, 0): "Origin", (1, 2): "Point A", (-1, 1): "Point B"}
print(coordinates[(1, 2)]) # 結果: Point A
イミュータブルとは何か
イミュータブルなオブジェクトは、一度作成されるとその状態を変更できません。Pythonのイミュータブルなデータ構造には、タプルや文字列などがあります。イミュータブルなデータ構造には以下のような利点があります。
イミュータブルなオブジェクトは、ハッシュ可能であるため、ディクショナリのキーとして使用できます。(hash(変数名)を実行できる)
イミュータブルなオブジェクトは、変更されることがないため、プログラムの安全性が向上します。誤って変更されることがないため、デバッグが容易になります。
イミュータブルなオブジェクトは、複数の変数やデータ構造で共有されても問題がありません。これにより、メモリ使用効率が向上します。
タプルは、このイミュータブルという性質から変更の必要がない変数や、定数で使用されることが多いです。
タプルのメソッド
タプルのメソッドは少ないです。代表的なものとして以下のものがあります。
count(x)
タプル内のxの出現回数を返します。
# タプルの作成
numbers = (1, 2, 3, 2, 4, 2, 5)
# タプル内で 2 が出現する回数をカウント
count_of_2 = numbers.count(2)
index(x, [start, [stop]])
タプル内でxが最初に出現する位置のインデックスを返します。オプションのstartとstopを指定して、検索範囲を制限することもできます。
以下のような形で使用します。
# タプルの作成
numbers = (1, 2, 3, 2, 4, 2, 5)
# タプル内で 2 が最初に出現するインデックスを取得
index_of_2 = numbers.index(2)
# インデックス3以降で、2 が出現するインデックスを取得
index_of_2_after_3 = numbers.index(2, 3)
# インデックス2からインデックス5までの範囲で、2 が出現するインデックスを取得
index_of_2_between_2_and_5 = numbers.index(2, 2, 5)
タプルとリストの相互変換
タプルとリストは似たようなデータ構造でして、それぞれに対して変換することができます。
# タプルの作成
my_tuple = (1, 2, 3, 4, 5)
# タプルをリストに変換
my_list = list(my_tuple)
# リストの作成
my_list2 = [6, 7, 8, 9, 10]
# リストをタプルに変換
my_tuple2 = tuple(my_list2)
タプルの重要性
安全性: タプルはイミュータブルであるため、誤って変更されることがなく、プログラムの安全性が向上します。また、デバッグが容易になります。
メモリ効率: タプルは、同じデータを複数の変数やデータ構造で共有することができます。これにより、メモリ使用効率が向上します。
高速化: タプルはリストに比べてメモリ上のサイズが小さいため、処理速度が向上する場合があります。また、イミュータブルなデータ構造であることから、Pythonのインタプリタを最適化しやすくなります。
柔軟性: タプルは、異なるタイプのデータを一つのオブジェクトとして扱うことができます。これにより、Pythonプログラムで異なる種類のデータを効率的に扱うことができます。
以上、タプルについて今回は説明しました。