Python tuple()とタプルの使い方8つ

この記事では、Python tupleの使い方について詳しく説明します。Pythonはさまざまなデータ型を提供しており、その中の一つがタプル(tuple)です。タプルはリスト(list)に似ていますが、値が変更できない不変型(immutable)のデータ型です。また、タプルを活用するさまざまな方法と注意点も併せて取り上げます。


Python tupleとは?

タプル(tuple)は、複数の値を一つにまとめて扱うことができるデータ型です。リスト(list)とは異なり、タプルは作成後に値を変更できないため、不変型データ型に分類されます。そのため、値の修正や削除はできません。

Python
my_tuple = (1, 2, 3)

上記の例では、my_tupleは1, 2, 3という値を持つタプルです。タプルを使用する際は、丸括弧()を使って作成します。もし1つだけの要素を持つタプルを作りたい場合は、コンマ(,)を追加してタプルとして認識させる必要があります。

Python
type((5))
type((5,))

コンマがない場合は単なる数値として認識されてしまうため、必ずコンマを追加する必要があります。次の図では、要素が1つのタプルにコンマを追加しなかった場合には整数の5として処理され、コンマを追加した場合にはタプルとして処理されることが確認できます。

図1. Python tuple: 要素が1つの場合
図1. Python tuple: 要素が1つの場合

タプルの特徴

タプルは以下の特徴を持っています:

  • 不変性(Immutable): 一度作成されたタプルは変更できません。つまり、タプル内の要素を変更したり、新しい要素を追加することはできません。
  • 順序保持(Ordering): タプルは作成された順に要素を記憶します。したがって、インデックスを使って特定の位置にある値に簡単にアクセスできます。
  • 重複許可(Duplicates allowed): タプル内に同じ値を複数回入れることが可能です。

タプルとリストの違い

タプルとリストは非常に似ていますが、最大の違いは変更の可否です。リストは自由に値を変更できるのに対し、タプルは値を変更できません。そのため、タプルは主に変更する必要のないデータを保存する際に使用されます。例えば、座標や日付などの固定された値の保存に適しています。

さらに、タプルはリストに比べてメモリ使用量が少なく、処理速度が速いという利点があります。もしプログラムで値の変更が必要ない場合は、リストの代わりにタプルを使用することで、パフォーマンスの向上が期待できます。

タプルの使い方

タプルの生成

タプルはさまざまな方法で生成できます。最も基本的な方法は、丸括弧()を使うことです。

Python
tuple1 = (1, 2, 3)
tuple2 = ('a', 'b', 'c')

空のタプルの生成

値を持たない空のタプルを生成できます。

Python
empty_tuple = ()

または、tuple()を使用して空のタプルを作成することもできます。

Python
empty_tuple = tuple()

タプルの要素アクセス

タプルの要素はインデックス(index)を使用してアクセスできます。インデックスは0から始まります。

Python
my_tuple = (10, 20, 30)
print("index 0: ", my_tuple[0])
print("index 1: ", my_tuple[1])
図2. Python tuple: インデックスでアクセスする
図2. Python tuple: インデックスでアクセスする

タプルのアンパッキング(Tuple Unpacking)

タプルの要素を個別の変数に割り当てる方法をアンパッキング(unpacking)といいます。アンパッキングにより、タプルの各要素を簡単に取り出すことができます。

Python
def get_width_and_height():
  width = 250
  height = 450
  return (width, height)

width, height = get_width_and_height()
print(width)
print(height)

次の図では、タプルの値を個別の変数widthheightに分解してそれぞれに割り当てることができる様子が確認できます。

図3. Python tuple: 要素を個別の変数に割り当てる(unpacking)
図3. Python tuple: 要素を個別の変数に割り当てる(unpacking)

タプルの長さ確認

リストと同様に、タプルの長さを確認するにはlen()関数を使用します。

Python
my_tuple = (1, 3, 7, 4, 2, 3, 4, 5)
print(len(my_tuple))

タプルの結合

リストと同様に、2つ以上のタプルを結合することができます。タプルは+演算子を使用して結合できます。ただし、タプルは基本的に不変型データなので、リストのようにextend()メソッドを使って既存のタプルに変化を加えることはできません。

Python
tuple1 = (1, 2, 3)
tuple2 = (4, 5, 6)
combined_tuple = tuple1 + tuple2
print(combined_tuple)

リストと同様に、加算演算子(+)を使って2つのタプルを1つに結合することができます。

図4. Python tuple: 加算演算子でタプルを結合
図4. Python tuple: 加算演算子でタプルを結合

タプルのスライシング(Slicing)

リストと同様に、タプルでもスライシングを使用して部分的に要素を抽出することができます。スライシングは、インデックスの範囲を指定して特定の区間の要素を取得する方法です。

Python
my_tuple = (8, 2, 9, 3, 5, 1, 7, 4)
print(my_tuple[3:6])

3番目のインデックスの値である3から、6番目のインデックスである7直前の1までが返されることが確認できます。

図5. Python tuple: スライシングでタプルを抽出
図5. Python tuple: スライシングでタプルを抽出

タプルの活用例

タプルは特に固定されたデータを保存したり、複数の値を一度に返す場合に便利です。関数で複数の値を返すと、タプルとして処理されます。

Python
def get_min_max(numbers):
    return min(numbers), max(numbers)

result = get_min_max([80, 20, 130, 60])
print(result)

min_value, max_value = get_min_max([80, 20, 130, 60])  # Unpacking tuple
print(min_value, max_value)

以下の図のように、min()値とmax()値がタプルとして処理されることが確認できます。そして、アンパッキング方式を使用してmin_valuemax_valueに割り当てることも確認しました。

図6. Python tuple: 複数の返り値がタプルとして処理される
図6. Python tuple: 複数の返り値がタプルとして処理される

タプル使用時の注意点

タプルは不変性が特徴なので、値を変更する必要がある場合はリストを使用することをお勧めします。また、1つの要素を持つタプルを生成する際には必ずコンマ(,)を追加することを忘れないようにしてください。コンマを忘れると、タプルではなく単一の値として処理されます。

まとめ

タプルはPythonで頻繁に使用される不変型データ型であり、値の変更が必要ない場合に便利です。リストと似ていますが、値を変更できない点で差別化され、メモリ効率の面でも優れています。タプルを利用したさまざまな機能、例えばアンパッキング、スライシング、複数値の返却などは、コードの簡潔さとパフォーマンスの向上に寄与します。タプルを適切に活用することで、プログラムのパフォーマンス向上と可読性の改善が期待できます。

リファレンス

関連ポスト

コメントする