Python タプル完全ガイド:定義、活用、リストとの違い
タプルは、順序付けられかつ不変(イミュータブル)なオブジェクトのコレクションです。タプルはリストと同様にシーケンスです。タプルとリストの違いは、タプルはリストとは異なり変更できず、タプルは丸括弧を使用するのに対し、リストは角括弧を使用することです。
タプルの作成は、異なるカンマ区切りの値を並べるだけで簡単です。オプションで、これらのカンマ区切りの値を丸括弧で囲むこともできます。例:
tup1 = ('physics', 'chemistry', 1997, 2000)
tup2 = (1, 2, 3, 4, 5)
tup3 = "a", "b", "c", "d"
空のタプルは、何も含まない 2 つの丸括弧で書きます。
tup1 = ()
単一の値のみを含むタプルを書くには、値が 1 つしかなくてもカンマを含める必要があります。
tup1 = (50,)
文字列のインデックスと同様に、タプルのインデックスは 0 から始まり、スライス、連結などが可能です。
タプル内の値へのアクセス
タプル内の値にアクセスするには、スライスのために角括弧と、そのインデックスで利用可能な値を取得するためのインデックスを使用します。例:
ライブ デモ#!/usr/bin/python
tup1 = ('physics', 'chemistry', 1997, 2000)
tup2 = (1, 2, 3, 4, 5, 6, 7)
print "tup1[0]: ", tup1[0]
print "tup2[1:5]: ", tup2[1:5]
上記のコードを実行すると、次の結果が得られます。
tup1[0]: physics tup2[1:5]: [2, 3, 4, 5]
タプルの更新
タプルは不変であるため、タプル要素の値を更新または変更することはできません。既存のタプルの一部を取得して新しいタプルを作成することは可能です。次の例でこれを示します。
ライブ デモ#!/usr/bin/python
tup1 = (12, 34.56)
tup2 = ('abc', 'xyz')
# 以下の操作はタプルでは無効
# tup1[0] = 100
# 代わりに新しいタプルを作成
tup3 = tup1 + tup2
print tup3
上記のコードを実行すると、次の結果が得られます。
(12, 34.56, 'abc', 'xyz')
タプル要素の削除
個々のタプル要素を削除することはできません。もちろん、不要な要素を除いて別のタプルを作成することは問題ありません。
タプル全体を明示的に削除するには、del 文を使用します。例:
ライブ デモ#!/usr/bin/python
tup = ('physics', 'chemistry', 1997, 2000)
print tup
del tup
print "After deleting tup : "
print tup
次の結果が得られます。del tup の後ではタプルが存在しなくなるため、例外が発生します。
('physics', 'chemistry', 1997, 2000)
After deleting tup :
Traceback (most recent call last):
File "test.py", line 9, in
print tup
NameError: name 'tup' is not defined
基本的なタプル操作
タプルは文字列と同様に + と * 演算子に反応します。これらは連結と反復を意味しますが、結果は文字列ではなく新しいタプルになります。
実際、タプルは前章で文字列に使用したすべての一般的なシーケンス操作に対応しています。
| Python 式 | 結果 | 説明 |
|---|---|---|
| len((1, 2, 3)) | 3 | 長さ |
| (1, 2, 3) + (4, 5, 6) | (1, 2, 3, 4, 5, 6) | 連結 |
| ('Hi!',) * 4 | ('Hi!', 'Hi!', 'Hi!', 'Hi!') | 反復 |
| 3 in (1, 2, 3) | True | メンバーシップ |
| for x in (1, 2, 3): print x, | 1 2 3 | イテレーション |
インデックス、スライス、マトリックス
タプルはシーケンスであるため、インデックスとスライスは文字列と同じように機能します。以下の入力を想定します:
L = ('spam', 'Spam', 'SPAM!')
| Python 式 | 結果 | 説明 |
|---|---|---|
| L[2] | 'SPAM!' | オフセットはゼロから始まる |
| L[-2] | 'Spam' | 負のインデックス:右から数える |
| L[1:] | ['Spam', 'SPAM!'] | スライスでセクションを取得 |
区切り文字なし
複数のオブジェクトをカンマで区切って、識別記号(リストの角括弧、タプルの丸括弧など)なしで記述した場合、デフォルトでタプルになります。以下の短い例で示します。
ライブ デモ#!/usr/bin/python print 'abc', -4.24e93, 18+6.6j, 'xyz' x, y = 1, 2 print "Value of x , y : ", x, y
上記のコードを実行すると、次の結果が得られます。
abc -4.24e+93 (18+6.6j) xyz Value of x , y : 1 2
組み込みタプル関数
Python には以下のタプル関数が含まれています。
| 番号 | 関数と説明 |
|---|---|
| 1 | cmp(tuple1, tuple2) 両タプルの要素を比較します。 |
| 2 | len(tuple) タプルの総長を返します。 |
| 3 | max(tuple) タプルから最大値を持つアイテムを返します。 |
| 4 | min(tuple) タプルから最小値を持つアイテムを返します。 |
| 5 | tuple(seq) リストをタプルに変換します。 |
Python
- Python データ型マスター: 実践ガイド
- Python 演算子完全マスター: 包括的ガイド
- Python pass文完全マスター: 実践ガイド
- Python 関数引数完全マスター: 位置引数・キーワード引数・デフォルト引数
- Python辞書完全ガイド:作成、操作、高度なテクニック
- Pythonイテレータ完全ガイド:仕組みと自作方法
- Pythonクロージャ解説:ネスト関数が変数を捕捉する仕組み
- Python datetimeマスター:日付・時刻・タイムゾーン実践ガイド
- Pythonのtime.sleep()をマスター:ベストプラクティス、マルチスレッド、実例
- Pythonタプル完全ガイド:パッキング、アンパッキング、比較、スライス、辞書キー活用
- Python enumerate()をマスター:リスト、タプル、文字列、辞書でインデックス付きループ