このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

【Python入門】タプルとは

タプルとは

 タプルは、Pythonで複数の関連データをひとまとめにして扱うためのデータ構造です。リストと同様にシーケンスとしての機能を持ちながら、一度作成すると中身を変更できないイミュータブルな性質が特徴です。そのため、データの改変が不要な場合や、辞書のキーや集合の要素として安全に利用する場合に適しています。ここでは、タプルの基本的な特徴や作成方法について、具体例や表を交えて詳しく解説していきます。

プログラムのダウンロード

 「ダウンロード」から、JupyterLab で実行できるサンプルプログラムがダウンロードできます。ファイルは、ESET Endpoint Securityでウイルスチェックをしておりますが、ダウンロードとプログラムの実行は自己責任でお願いいたします。

1.タプルの基本的な特徴

 タプルは、複数のデータをひとまとめにできるシーケンス型ですが、その不変性が大きな特徴です。ここでは、シーケンスとしての利用方法とイミュータブルな性質による利点について説明します。

1.1. シーケンスとしての利用

 タプルは、リストと同様にインデックスやスライスが利用できます。たとえば、平日をまとめたタプルを作成し、特定の曜日を取り出す例を示します。

サンプルプログラム

# 平日の名前を格納したタプルの作成
weekdays = ('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday')

# インデックスを用いて2番目の曜日を取得(0始まりのため'Tuesday'が得られる)
second_day = weekdays[1]
print("2番目の曜日:", second_day)  # 出力例: Tuesday

# スライスを用いて最初の3日間を取得
first_three = weekdays[0:3]
print("最初の3日間:", first_three)  # 出力例: ('Monday', 'Tuesday', 'Wednesday')

実行結果

2番目の曜日: Tuesday
最初の3日間: ('Monday', 'Tuesday', 'Wednesday')

解説

  • タプルweekdaysは丸括弧で囲まれ、各曜日がカンマで区切られています。
  • インデックス[1]でリストと同様に要素にアクセスでき、[0:3]のスライスで部分的なタプルを取り出しています。

1.2. イミュータブルな性質とその利点

 タプルは一度作成すると中身を変更できません。このイミュータブルな性質により、データが誤って変更されるのを防ぎ、ハッシュ化が可能となるため辞書のキーや集合の要素として利用できます。

サンプルプログラム

# 座標を表すタプルの作成
coordinate = (35.6895, 139.6917)

# タプルの内容を変更しようとするとエラーになる例(コメントアウト)
# coordinate[0] = 34.0522  # TypeError: 'tuple' object does not support item assignment

# タプルを辞書のキーとして利用
location_info = {
    coordinate: "Tokyo",
    (34.0522, -118.2437): "Los Angeles"
}
print("辞書に格納された都市情報:", location_info)

実行結果

辞書に格納された都市情報: {(35.6895, 139.6917): 'Tokyo', (34.0522, -118.2437): 'Los Angeles'}

解説

  • coordinateタプルは、変更が許されないため、意図せずデータが変わる心配がなく安全に利用できます。
  • イミュータブルな性質により、タプルはハッシュ可能となり、辞書のキーとして用いることが可能です。

下記の表は、タプルとリストの主な違いをまとめたものです。

特徴タプルリスト
可変性イミュータブル(変更不可)ミュータブル(変更可能)
インデックスアクセス可能可能
主な用途定数データ、辞書のキー、集合の要素動的なデータの管理

2.タプルの作成方法

 タプルは、値をカンマで区切ることで作成できます。丸括弧で囲むのが一般的ですが、場合によっては丸括弧を省略してもタプルとして認識されます。ここでは、さまざまな作成方法を具体例とともに紹介します。

2.1. 丸括弧を用いたタプルの生成

 丸括弧を用いると、タプルであることが明示的になり、読みやすくなります。以下は、商品の名前と価格をまとめたタプルの例です。

サンプルプログラム

# 商品名と価格をまとめたタプルを作成(丸括弧を使用)
product = ('coffee', 300)
print("商品タプル:", product)  # 出力例: ('coffee', 300)

実行結果

商品タプル: ('coffee', 300)

解説

  • 丸括弧内で要素をカンマで区切って並べることで、タプルが作成されます。
  • この表記により、出力時にもタプルであることが明確に示されます。

・1要素のみのタプル

また、1要素のみのタプルを作成する際には、必ず末尾にカンマを付ける必要があります。

# 1要素のタプル(カンマが必須)
beverage = ('latte',)
print("1要素のタプル:", beverage)  # 出力例: ('latte',)

実行結果

1要素のタプル: ('latte',)

・空のタプルの作成

さらに、空のタプルは次のように作成します。

# 空のタプルの作成
empty = ()
print("空のタプル:", empty)  # 出力例: ()

実行結果

空のタプル: ()

2.2. 丸括弧の省略とtuple()関数による生成

 タプルは、値同士をカンマで区切ることで、丸括弧を省略しても生成できます。しかし、省略するとコードの意図が分かりにくくなる場合があるため、明示的な丸括弧を用いることが推奨されます。また、tuple()関数を使えば、イテラブルから簡単にタプルを作成できます。

サンプルプログラム

# 丸括弧を省略したタプルの作成(カンマが重要)
snack = 'cookie', 250
print("丸括弧省略のタプル:", snack)  # 出力例: ('cookie', 250)

# tuple()関数を使って、0から4までの数値のタプルを作成
numbers = tuple(range(5))
print("tuple()関数で作成したタプル:", numbers)  # 出力例: (0, 1, 2, 3, 4)

実行結果

丸括弧省略のタプル: ('cookie', 250)
tuple()関数で作成したタプル: (0, 1, 2, 3, 4)

下記の表は、タプルの作成方法の違いを整理したものです。

作成方法記法
複数要素のタプル(丸括弧あり)(値1, 値2, …)('tea', 200)
1要素のタプル(丸括弧あり)(値1, )('espresso',)
丸括弧を省略したタプル値1, 値2, …'muffin', 150
空のタプル()()
tuple()関数による作成tuple(イテラブル)tuple(range(5))

まとめ

タプルは、複数のデータを安全かつ効率的にまとめるためのデータ構造です。

  • シーケンスとしての利便性: インデックスやスライスでのアクセスが可能です。
  • イミュータブルな性質: 作成後の変更ができないため、定数データとして利用でき、辞書のキーや集合の要素としても使えます。
  • 作成方法の多様性: 丸括弧を用いた明示的な方法、カンマのみでの作成、そしてtuple()関数による変換など、シチュエーションに応じたタプルの生成が可能です。

 次のステップでは、タプルに対してインデックスやスライスをどのように利用するかについて、さらに詳しく解説していきます。