Pythonには、複数の値をまとめて扱うためのデータ型がいくつかありますが、タプルはリストと非常によく似た役割を持つデータ型です。しかし、リストとは異なる重要な特徴があり、それぞれのデータ型には適した使い分けが存在します。
この記事では、タプルの基本的な使い方と、リストとの決定的な違い、そして両者を変換する方法について解説します。
タプルとは?
タプルは、複数の値を順番に並べたデータ型で、丸括弧 ()
で値を囲み、カンマ ,
で区切って作成します。リストと同様に、インデックスやスライスを使って要素にアクセスすることができます。
# 様々なデータ型を格納したタプル
user_info = ("Kenji", 25, "Tokyo")
# インデックスで要素を取得
print(user_info[0]) # 出力: Kenji
# スライスで一部分を取得
print(user_info[1:3])# 出力: (25, 'Tokyo')
# len()関数で要素数を取得
print(len(user_info)) # 出力: 3
タプルを作成する際の重要な注意点として、要素が1つのタプルを定義する際は、要素の後ろに必ずカンマを付けなければなりません。カンマがないと、ただの括弧で囲まれた値として認識されてしまいます。
# 1要素のタプル
single_item_tuple = ("apple",)
print(type(single_item_tuple)) # 出力: <class 'tuple'>
# これはタプルではない
not_a_tuple = ("apple")
print(type(not_a_tuple)) # 出力: <class 'str'>
タプルの特徴:イミュータブル
タプルの最も重要な特徴は、**イミュータブル(変更不可能)**なデータ型であることです。一度タプルを作成すると、その中の要素を変更、追加、または削除することはできません。
# データを格納したタプル
coordinates = (10, 20, 30)
# 2番目の要素を変更しようとするとエラーになる
# coordinates[1] = 50 # この行はTypeErrorを引き起こします
このコードを実行すると、TypeError
が発生します。これは、タプルがミュータブルなリストとは異なり、作成後に変更できないという性質を持っているためです。この性質により、タプルは「変更されるべきでないデータ」を扱う際に安全な選択肢となります。
リストとタプル間の変換
タプルをリストに変換したり、その逆を行ったりするには、それぞれlist()
関数とtuple()
関数を使います。
list()
: タプルや文字列などのシーケンスをリストに変換します。tuple()
: リストや文字列などのシーケンスをタプルに変換します。
# リストをタプルに変換
items_list = ["book", "pen", 5]
items_tuple = tuple(items_list)
print(items_tuple) # 出力: ('book', 'pen', 5)
# タプルをリストに変換
data_tuple = ("red", "green", "blue")
data_list = list(data_tuple)
print(data_list) # 出力: ['red', 'green', 'blue']
# 文字列もリストに変換できる
word_as_list = list("hello")
print(word_as_list) # 出力: ['h', 'e', 'l', 'l', 'o']
まとめ
- タプルは丸括弧
()
を使って定義される、順番のあるデータ型です。 - リストと同様に、インデックスやスライスで要素にアクセスできます。
- 決定的な違いは、タプルが**イミュータブル(変更不可能)**であることです。
- 変更の必要がないデータを扱う場合は、タプルを使うのが一般的です。
list()
関数とtuple()
関数を使って、両者を簡単に相互変換できます。
これらの特性を理解することで、プログラムの目的やデータの性質に応じて、リストとタプルを適切に使い分けることができるようになります。