Pythonタプル完全ガイド:作成、アクセス、高度な操作
Pythonタプル
Pythonのタプルの威力を発見—イミュータブルなシーケンスが提供する速度、安全性、異種データへの汎用性。基本構文から高度な操作まで、リストではなくタプルを選ぶべき場面を理解できます。
動画:Pythonリストとタプル
タプルはリストのように振る舞いますが、作成後にイミュータブル(変更不可)です。リストとは異なり要素を変更できないため、固定データセットに最適です。
タプルの作成
タプルはカンマ区切りの値を丸括弧()内に配置して定義します。括弧は省略可能ですが、可読性向上のため推奨されます。
タプルは任意の数のアイテムを含み、整数、浮動小数点、文字列、リスト、他のタプルなどデータ型を混在させられます。
# さまざまなタプル
# 空のタプル
my_tuple = ()
print(my_tuple)
# 整数のタプル
my_tuple = (1, 2, 3)
print(my_tuple)
# 混合データ型
my_tuple = (1, "Hello", 3.4)
print(my_tuple)
# ネストしたタプル
my_tuple = ("mouse", [8, 4, 6], (1, 2, 3))
print(my_tuple)
出力
() (1, 2, 3) (1, 'Hello', 3.4) ('mouse', [8, 4, 6], (1, 2, 3))
タプルは括弧なしでも作成可能—これをタプルパッキングと呼びます。
my_tuple = 3, 4.6, "dog"
print(my_tuple)
# タプルアンパッキング
a, b, c = my_tuple
print(a)
print(b)
print(c)
出力
(3, 4.6, 'dog') 3 4.6 dog
単一要素のタプルには、ただの値と区別するため末尾のカンマが必要です。
my_tuple = ("hello")
print(type(my_tuple)) # <class 'str'>
# 単一要素タプル
my_tuple = ("hello",)
print(type(my_tuple)) # <class 'tuple'>
# 括弧省略可能
my_tuple = "hello",
print(type(my_tuple)) # <class 'tuple'>
出力
<class 'str'> <class 'tuple'> <class 'tuple'>
タプル要素へのアクセス
タプルはいくつかの方法で要素アクセスをサポートします:
1. インデックス
ゼロベースのインデックスで[]演算子を使用。範囲外はIndexError、非整数はTypeError。
# インデックス例
my_tuple = ('p','e','r','m','i','t')
print(my_tuple[0]) # 'p'
print(my_tuple[5]) # 't'
# ネストインデックス
n_tuple = ("mouse", [8, 4, 6], (1, 2, 3))
print(n_tuple[0][3]) # 's'
print(n_tuple[1][1]) # 4
出力
p t s 4
2. 負のインデックス
負のインデックスは末尾から数えます:-1は最後の要素。
# 負のインデックス
my_tuple = ('p', 'e', 'r', 'm', 'i', 't')
print(my_tuple[-1]) # 't'
print(my_tuple[-6]) # 'p'
出力
t p
3. スライシング
start:stop構文で部分配列を抽出。
# スライシング例
my_tuple = ('p','r','o','g','r','a','m','i','z')
print(my_tuple[1:4]) # ('r', 'o', 'g')
print(my_tuple[:-7]) # ('p', 'r')
print(my_tuple[7:]) # ('i', 'z')
print(my_tuple[:]) # 全タプル
出力
('r', 'o', 'g') ('p', 'r') ('i', 'z') ('p', 'r', 'o', 'g', 'r', 'a', 'm', 'i', 'z')

タプルの変更
タプルはイミュータブルです。要素への直接代入はTypeErrorを発生させます:
# 変更の試み
my_tuple = (4, 2, 3, [6, 5])
# my_tuple[1] = 9 # TypeError
しかし、要素自体がミュータブル(例:リスト)な場合、その内部状態は変更可能です:
my_tuple[3][0] = 9
print(my_tuple) # (4, 2, 3, [9, 5])
タプル全体を新しい値に再代入は可能です:
my_tuple = ('p', 'r', 'o', 'g', 'r', 'a', 'm', 'i', 'z')
print(my_tuple)
+で連結、*で繰り返し;両方とも新しいタプルを返します。
print((1, 2, 3) + (4, 5, 6)) # (1, 2, 3, 4, 5, 6)
print(("Repeat",) * 3) # ('Repeat', 'Repeat', 'Repeat')
出力
(1, 2, 3, 4, 5, 6) ('Repeat', 'Repeat', 'Repeat')
タプルの削除
個別アイテムは削除できません。delでタプル全体を削除可能:
my_tuple = ('p', 'r', 'o', 'g', 'r', 'a', 'm', 'i', 'z')
# del my_tuple[3] # TypeError
del my_tuple
# print(my_tuple) # NameError
出力
Traceback (most recent call last): File "<string>", line 12, in <module> NameError: name 'my_tuple' is not defined
タプルメソッド
タプルが公開する組み込みメソッドはcount()とindex()のみです。
my_tuple = ('a', 'p', 'p', 'l', 'e')
print(my_tuple.count('p')) # 2
print(my_tuple.index('l')) # 3
出力
2 3
その他のタプル操作
1. メンバーシップテスト
inキーワードで存在確認。
my_tuple = ('a', 'p', 'p', 'l', 'e')
print('a' in my_tuple)
print('b' in my_tuple)
print('g' not in my_tuple)
出力
True False True
2. イテレーション
forでタプルをループ。
for name in ('John', 'Kate'):
print("Hello", name)
出力
Hello John Hello Kate
3. リストに対する利点
- 異種データに最適;リストは通常同種データ用
- イミュータブル性によりイテレーションでパフォーマンス優位
- イミュータブル要素のみのタプルは辞書キーとして使用可能
- 書き込み保護されたデータが保証され、偶発的変更を防止
Python
- Python データ型マスター: 実践ガイド
- Python 演算子完全マスター: 包括的ガイド
- Python pass文完全マスター: 実践ガイド
- Python 関数引数完全マスター: 位置引数・キーワード引数・デフォルト引数
- Python辞書完全ガイド:作成、操作、高度なテクニック
- Pythonイテレータ完全ガイド:仕組みと自作方法
- Pythonクロージャ解説:ネスト関数が変数を捕捉する仕組み
- Python datetimeマスター:日付・時刻・タイムゾーン実践ガイド
- Python 概要:高水準、読みやすい、インタラクティブ、オブジェクト指向
- Python 数値型完全ガイド:不変な数値データ型の理解と活用
- Python 文字列完全マスター:作成、アクセス、操作のすべて