Pythonのタプル(tuple)は、一度作成すると中身を変更できない「イミュータブル(変更不可能)」なデータ型です。
しかし、「変更」ができないだけで、リスト(list)と同様に、格納されている要素を**「参照」したり、「スライス(切り出し)」したり、「要素数」**を調べたりすることは自由に行えます。
この記事では、タプルの基本的な参照・操作方法について解説します。
目次
1. 要素数の取得 (len())
タプルにいくつの要素が格納されているか(長さ)を調べるには、リストや文字列と同じく、組み込み関数の len() を使用します。
構文:
len(タプル変数)
使用例:
# 稼働中のサービス一覧
active_services = ("httpd", "mysql", "sshd", "redis")
# len() で要素数を取得
service_count = len(active_services)
print(f"タプルの内容: {active_services}")
print(f"稼働中のサービス数: {service_count}")
実行結果:
タプルの内容: ('httpd', 'mysql', 'sshd', 'redis')
稼働中のサービス数: 4
2. 要素の参照(インデックス)
タプル内の特定の要素にアクセスするには、リストと全く同じようにインデックス(位置番号)を使います。
正のインデックス(0から始まる)
[0] が先頭、[1] が2番目の要素を指します。
# 0番目 (先頭) の要素
first_service = active_services[0]
print(f"インデックス 0: {first_service}")
実行結果:
インデックス 0: httpd
負のインデックス(-1から始まる)
[-1] が末尾、[-2] が末尾から2番目の要素を指します。
# -1番目 (末尾) の要素
last_service = active_services[-1]
print(f"インデックス -1: {last_service}")
実行結果:
インデックス -1: redis
3. 要素の切り出し(スライス)
タプルの一部をまとめて切り出し、新しいタプルとして取得する「スライス」構文も、リストと全く同じように使用できます。
構文: タプル変数[start:stop:step]
startは含まれ、stopは含まれません(その手前まで)。
active_services = ("httpd", "mysql", "sshd", "redis", "nginx")
# インデックス: 0 1 2 3 4
# インデックス 1 ("mysql") から 3 ("redis") の手前まで
# つまり [1], [2] を切り出す
core_services = active_services[1:3]
print(f"元のタプル: {active_services}")
print(f"スライス結果: {core_services}")
print(f"スライス結果の型: {type(core_services)}")
実行結果:
元のタプル: ('httpd', 'mysql', 'sshd', 'redis', 'nginx')
スライス結果: ('mysql', 'sshd')
スライス結果の型: <class 'tuple'>
スライスで切り出した結果も、list ではなく tuple になっていることが重要です。
まとめ:タプルは「参照」のみ可能
タプル(tuple)とリスト(list)の操作性の違いを整理します。
- できる操作(同じ):
len(t)(要素数の取得)t[0](インデックス参照)t[-1](負のインデックス参照)t[1:3](スライス)for item in t:(ループ処理)if "value" in t:(in演算子による検索)
- できない操作(タプル特有のエラー):
t[0] = "new"(TypeError): 要素の変更t.append("new")(AttributeError): 要素の追加del t[0](TypeError): 要素の削除
タプルは、中身を「変更」することはできませんが、中身を「読む」操作はリストと全く同じ感覚で行うことができます。
