生成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のイミュータブルなデータ構造には、タプルや文字列などがあります。イミュータブルなデータ構造には以下のような利点があります。

  1. イミュータブルなオブジェクトは、ハッシュ可能であるため、ディクショナリのキーとして使用できます。(hash(変数名)を実行できる)

  2. イミュータブルなオブジェクトは、変更されることがないため、プログラムの安全性が向上します。誤って変更されることがないため、デバッグが容易になります。

  3. イミュータブルなオブジェクトは、複数の変数やデータ構造で共有されても問題がありません。これにより、メモリ使用効率が向上します。

タプルは、このイミュータブルという性質から変更の必要がない変数や、定数で使用されることが多いです。

タプルのメソッド

タプルのメソッドは少ないです。代表的なものとして以下のものがあります。

count(x)

タプル内のxの出現回数を返します。

# タプルの作成
numbers = (1, 2, 3, 2, 4, 2, 5)

# タプル内で 2 が出現する回数をカウント
count_of_2 = numbers.count(2)


index(x, [start, [stop]])

タプル内でxが最初に出現する位置のインデックスを返します。オプションのstartstopを指定して、検索範囲を制限することもできます。

以下のような形で使用します。

# タプルの作成
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)

タプルの重要性

  1. 安全性: タプルはイミュータブルであるため、誤って変更されることがなく、プログラムの安全性が向上します。また、デバッグが容易になります。

  2. メモリ効率: タプルは、同じデータを複数の変数やデータ構造で共有することができます。これにより、メモリ使用効率が向上します。

  3. 高速化: タプルはリストに比べてメモリ上のサイズが小さいため、処理速度が向上する場合があります。また、イミュータブルなデータ構造であることから、Pythonのインタプリタを最適化しやすくなります。

  4. 柔軟性: タプルは、異なるタイプのデータを一つのオブジェクトとして扱うことができます。これにより、Pythonプログラムで異なる種類のデータを効率的に扱うことができます。

以上、タプルについて今回は説明しました。

この記事が気に入ったらサポートをしてみませんか?