タプルの利用方法
pythonのタプルは、tuple_a = ()として丸括弧を利用して宣言する。
タプルの大きな特徴は、イミュータブルであること
イミュータブルとは、値の変更ができないということで、配列のようにN番目の要素を削除したり更新することができない。
そして、タプルの値を更新するには、新たなタプルとして作成しなければいけない
そのため、タプルは宣言したのち値を変更せずに、定数のように用いる場合に用いることが多い。
Example
- タプルの宣言
tup1 = ('physics', 'chemistry', 1997, 2000)
tup2 = (1, 2, 3, 4, 5 )
tup3 = "a", "b", "c", "d"
tup1 = () # 空のタプルの作成
- タプルへのアクセス
print(tuple_a[0]) # タプルの一番目の要素にアクセス。appleと表示
tuple_a[0] = 'grape' # TypeError。tupleは変更できない。
tuple_a[0:3] # 0番目から2番目まで取り出す(apple, banana, orange)
tuple_a = tuple_a + ('grape',) # タプルに要素を一つ追加。+ ('',)として、タプル+タプルの形にする
- タプルのメソッド(count, index)
tuple_a.count('grape') # タプルに含まれるgrapeの数。1と表示される
tuple_a.index('grape') # タプルに含まれるgrapeの位置。4と表示される
- リストをタプルに変換
list_a = ['banana','apple','grape']
tuple_a = tuple(list_a) # tuple(リスト)として、リストをタプルに変換
配列(リスト)と比較したタプルを使う利点
リストでなくタプルを使う利点は、主に以下の3点がある
- タプルをハッシュ化可能なため、辞書型のキーとして、利用できる
- 値を変更したくないような値を用いる場合に、値が変更されないことを保障できる
- リストよりもタプルの方が、アクセスするスピードが速い
実際には、以下のように利用する
Example
- タプルをハッシュ化可能なため、辞書型のキーとして、利用できる
辞書型のキーとして利用するには、そのインスタンスがハッシュ化出来なければいけない。
タプルは、リストと違い、ハッシュ化することができるため、辞書のキーとして利用できる。
wintminster_position = (51.500485, -01.124342) # タプル型でウィントミンスターの位置(緯度、経度)を宣言
cities = {kamakura_position: '鎌倉', wintminster_position: 'London Palace of Westminster',} タプルを辞書型のキーにする
print(cities[(35.312656, 139.533062)]) 取り出すこともできる(鎌倉と表示される)
- 値を変更したくないような値を用いる場合に、値が変更されないことを保障できる
リスト型は中の値を変更することができるが、タプル型はできないため、値を変えたくない(例えば定数)場合などにタプルを用いると良い
- リストよりもタプルの方が、アクセスするスピードが速い
タプルの方がリストよりも値を取り出すスピードは速いとされている。
実際に比較をしてみると、以下のような結果になった。
アクセス回数 | 実行時間(3回平均) | |
タプル | 配列 | |
10,000,000回 | 1.020秒 | 1.179秒 |
50,000,000回 | 6.249秒 | 6.338秒 |
100,000,000回 | 12.994秒 | 15.311秒 |
以上の結果から、タプルの方が相対的に取り出す時間が速いことがわかる
参考までに、比較に利用したコードを以下に記載した
LENGTH = 50000000
tuple = tuple([i for i in range(LENGTH)])
list = [i for i in range(LENGTH)]
x = 0
start = time.time()
for i in range(LENGTH):
x = tuple[i] もしくは or x = list[i]
#↑tuple or listにアクセスする
elapsed_time = time.time() - start
print("経過時間 = {}".format(elapsed_time))
その他、タプル型の使い方
以下にタプルの便利な使い方についてまとめた。
Example
- タプルの長さ、最大、最小を求める
max(tuple_instance) # タプルの中の最大値を返す
min(tuple_instance) # タプルの中の最小値を返す
- タプルの長さ、最大、最小を求める
max(tuple_instance) # タプルの中の最大値を返す
min(tuple_instance) # タプルの中の最小値を返す
- その他、様々な使い道
('A',) * 4 # タプルの複数要素作成(('A', 'A', 'A', 'A')になる)
3 in (1, 2, 3) # 特定の値がタプルの中にあるか(Trueが返る)
for x in (1, 2, 3): print(x) # タプルの要素をループさせる