このページでは、Pythonのタプルについて解説していきます。
Pythonのタプルとは?
まずは、Pythonのタプルとは何かを解説していきます。
- タプルはカンマで区切られたリストで作成。
- タプルは不変なので、その要素を追加したり削除したりすることはできない。
- タプルの各要素にはインデックスを通じてアクセスできる。
- タプルで “in” および “not in” 演算子を使って要素の存在の確認ができる。
- タプルはシーケンスなので、forを使ってループ処理ができる。
- Pythonのタプルは
count()
とindex()
のメソッドを使える。
この記事もチェック:Pythonのリストの負のインデックス”-1″の使い方を解説する
Pythonでタプルの作成、初期化の方法
タプルは、すべての要素をカンマで区切られた括弧の中に入れることで作成することができます。
tuple_numbers = (1 , 2 , 3 , 1)
また、タプルには、文字列や数字、None等の様々な種類のオブジェクトを格納することができます。
tup = (1 , 2 , 3 , 1 , None ,"Hello")
また、ネストされたタプルを作成することもできます。
nested_tuple =((1 , 2), ("Hello","Hi"), "Python")
また、空のタプルを作ることもできます。
empty_tuple = ()
上記の例では、タプルを作るのに括弧を使っていましたが、実は括弧の使用は任意です。
しかし、普通はコードを読みやすくするために括弧は使うことが圧倒的に多いです。
なぜなら、要素が1つしかないタプルの場合だと、括弧は必須だからです。
tup = 1, 2, "Hello"
print(tup)
タプルの要素を取得する方法
タプルの要素にはインデックスを通してアクセスすることができます。
インデックスの値は0から始まり、配列やリストの要領で要素を取得できます。
tuple_numbers = (1 , 2 , 3 , 4)
print(f'First element in tuple is {tuple_numbers[0]}')
print(f'Third element in tuple is {tuple_numbers[3]}')
タプルは-1等のネガティブインデックスもサポートしています。
この場合、タプルの要素は末尾から検索されます。
tuple_numbers = (1 , 2 , 3 , 4)
print(f'Last element in tuple is {tuple_numbers[-1]}')
print(f'Second Last element in tuple is {tuple_numbers[-2]}')
print(f'First element in tuple is {tuple_numbers[-4]}')
タプルをネストにした場合、入れ子のインデックスを通してその要素にアクセスすることができます。
nested_tuple = (1 , 2, (3 , 4), (5 , 6 , 7))
nested_tuple[2][0]
nested_tuple[2][1]
タプルをスライスで取り出す
タプルのサブセットを取得するために、スライスを使う事ができます。
スライスは以下のコードの様に、コロンで区切られた2つのインデックスを含みます。
tuple_numbers = (1 , 2 , 3 , 4 , 5 , 6 , 7 , 8)
print(tuple_numbers[1:3])
print(tuple_numbers[:4])
print(tuple_numbers[5:])
print(tuple_numbers[:- 5])
結果は以下の通りです。
(2, 3)
(1, 2, 3, 4)
(6, 7, 8)
(1, 2, 3)
タプルはイミュータブルの性質を持つ
タプルはイミュータブルの性質を持つので、その要素を追加、更新、削除することはできません。
tup = (1 , 2)
tup[0] = 10
実際に上記のコードは以下のTypeError
が出ます。
Traceback (most recent call last):
File "Main.py", line 2, in
tup[0] = 10
TypeError: 'tuple' object does not support item assignment
しかし、タプルの要素がmutableである場合は、そのタプルの要素を取得して変更することができます。
list_fruits = ["Apple"]
tup = ("Hello", list_fruits)
list_fruits.append("Banana")
print(tup)
タプルを削除する方法
タプルの要素を削除することはできませんが、del
を使えば、タプル自体を削除することができます。
tup = (1 , 2)
del tup
タプルをプラス演算子で結合する方法
タプルの要素を結合して新しいタプルを作るには、+演算子を使用します。
tuple1 = (1 , 2)
tuple2 = (3 , 4)
tuple_all = tuple1 + tuple2
*(掛け算)を使ってタプルの要素を結合、追加する
タプルは、指定された回数だけ要素を繰り返した新しいタプルを作成するために、 * 演算子もサポートしています。
tup = (1 , 2, (3 , 4))
tup1 = tup * 3
print(tup1)
Pythonのタプル関数
タプルクラスには2つの関数があります。
-
count()
: 与えられた要素の出現回数を返す。 -
index(x, start, end)
: 値の最初のインデックスを返す。タプル中の値を探すために、開始と終了のインデックスを指定することができる。値が見つからない場合、ValueError が発生します。
tup = (1 , 2 , 3 , 1 , 2 , 1 , 3 , 2 , 1)
tup.count(1) # 1が4回登場しているので、4と表示
tup.index(2) # 1
tup.index(2 , 2) # 4
タプルをin, not in演算子を使って要素の存在確認をする
タプルに要素が含まれているかどうかは、in演算子で確認することができます。
同様に、”not in “演算子を使って、その要素がタプルに存在しないかどうかを調べることができる。
vowels = ( "a","e" ,"i" ,"o" ,"u")
is_true = "a" in vowels # True
is_false = "a" not in vowels # False
forループを使ってタプルを繰り返し処理をする
forループを使って、タプルの要素を繰り返し処理することができます。
vowels = ("a","e" ,"i" ,"o" ,"u")
for v in vowels:
print(v)
タプルを逆順に繰り返し処理したい場合は、reversed()関数を使えばOKです。
vowels = ("a","e" ,"i" ,"o" ,"u")
for v in reversed(vowels):
print(v)
この記事もチェック:Pythonのreversed関数を使ってリストを逆順に並び替える方法
Pythonではタプルとリストは何が違うのか?
タプルとリストには、以下の様な違いがあります。
- タプルは不変であるのに対し、リストは可変
- タプルは不変なので、タプルを反復する方がリストより若干速い。
- タプルはリストよりもメモリ効率が良い。
-
もし、要素を追加したり、削除したりしたい場合は、リストが良い。
Pythonのtuple()組み込み関数
また、タプルを作成するためにtuple()関数を使用することができます。
Listや文字列等の他の型をタプルに変換するのに便利です。
例えば、以下の様に使う事ができます。
この記事もチェック:PythonでリストをJSON文字列に変換する方法
リストからタプルを作る
list_numbers = [1 , 2 , 3]
tuple_numbers = tuple(list_numbers)
print(tuple_numbers)
# (1, 2, 3)
2. 文字列からタプルを作る
s = "ABCD"
tuple_str = tuple(s)
print(tuple_str)
# ('A', 'B', 'C', 'D')
3. Pythonのタプルをrange関数で作る
r = range(1 , 10)
tuple_range = tuple(r)
print(tuple_range)
# (1, 2, 3, 4, 5, 6, 7, 8, 9)