
tupleの編集
tupleは要素を編集することができません。ですので、var[n] = data
のように要素番号を指定して値を上書きしようとしてもエラーになります。これは、スライスで範囲指定した場合も同じです。

+ 演算子
tupleは、+
演算子で要素を結合することができます。+
演算子の結合は、それぞれのtupleの要素を抽出して新しいtupleを生成します。ですので、元のtupleは編集されません。
文字列やlistの時と同じで、違うデータ型との演算はできません。必ずtuple同士で+
演算子を使用します。
次のコードを実行して、挙動を確認しましょう。
sample_tuple = ('a', 'b', 'c')
new_tuple = sample_tuple + (1, 2, 3)
print(new_tuple) # ('a', 'b', 'c', 1, 2, 3)
print(sample_tuple) # ('a', 'b', 'c') # 元のtupleは変わらない
上記コードは、変数"sample_tuple"の('a', 'b', 'c')
と(1, 2, 3)
を+
演算子で結合し、新しいtupleを生成します。生成されたtupleは、変数"new_tuple"へ代入されています。
新しく生成されたtuple(('a', 'b', 'c', 1, 2, 3)
)には、元の2つのtupleの要素が順番に格納されます。尚、変数"sample_tuple"の中身は変わりません。
* 演算子
*
演算子を使用すると、元のtupleの要素を指定した回数だけ繰り返した新しいtupleを生成できます。これは文字列やlistの繰り返しと同じような挙動です。
次のコードを実行して、挙動を確認しましょう。
sample_tuple = ('a', 'b', 'c')
new_tuple = sample_tuple * 4
print(new_tuple) # ('a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c')
print(sample_tuple) # ('a', 'b', 'c') # 元のtupleは変わらない
('a', 'b', 'c')
の要素が4回繰り返された新しいtupleが生成され、変数"new_tuple"に代入されます。
tupleのメソッドの概要
tupleは要素を編集できないため、要素を編集するようなメソッドは用意されていません。
tupleに用意されているメソッドは、count()
とindex()
のみです。なお、この2つのメソッドの使い方はlistと同じです。
index()
index()
メソッドは、指定した値と等しい要素を検索し、存在する場合は最初に見つかった要素番号を返します。もし、指定した値と等しい要素がtupleの中に存在しなかった場合はエラーになります。
記法は3種類あり、『検索する要素のみ引数に渡す場合』、『検索する要素とstartの位置を指定する場合』、『検索する要素とstart, endの位置を指定する場合』があります。
index(x)
- tupleの全範囲から
x
と等しい値を検索する
- tupleの全範囲から
index(x, start)
tuple[start:]
の範囲からx
と等しい値を検索する
index(x, start, end)
tuple[start:end]
の範囲からx
と等しい値を検索する
任意の引数である"start"と"end"はスライス記法として解釈され、tupleの探索範囲を指定できます。この時返される要素番号は、"start"からの相対位置ではなく、tuple全体の先頭からの位置になります。
まずは、"start"と"end"を指定しない場合のコードを確認してみましょう。
sample_tuple = ('a', 'b', 'c', 'a')
result = sample_tuple.index('b')
print(result) # 1 (index() は要素の位置を返します。)
上記コードの実行結果は"1"になります。最初に見つかった'b'
の要素番号を返します。
次に、"start"のみ指定した場合のコードを確認してみましょう。
sample_tuple = ('a', 'b', 'c', 'b')
result = sample_tuple.index('b', 2)
print(result) # 3 (index() は要素の位置を返します。)
上記コードの場合は、sample_tuple[2:]
の範囲で検索を行うため、最初の'b'
([1])は検索の範囲外で、2番目の'b'
([3])が検索に引っかかります。実行結果は"3"になります。
次に、"start"と"end"を指定する場合のコードを確認してみましょう。
sample_tuple = ('a', 'b', 'c', 'b')
result = sample_tuple.index('b', 2, 3)
print(result) # error (index() は、指定された範囲内に要素が見つからない場合、エラーを発生させます。)
上記コードの場合、sample_tuple[2:3]
の範囲で検索を行います。最初の'b'
([1])は検索の範囲外で、2番目の'b'
([3])も範囲外となるため、エラーになります。(スライスは"end"で指定した要素番号は含まないため。)
もし、最後の要素まで検索させたい場合は、"end"の指定は省略しましょう。
count()
count()
メソッドは、tupleの要素のうち、指定された値と等しい要素の数を返します。
sample_tuple = ('a', 'b', 'c', 'a')
result = sample_tuple.count('a')
print(result) # 2
上記コードの場合、tupleに'a'
が2つ存在するため、実行結果は"2"になります。
count()
メソッドは、要素が存在しない場合はエラーにならずに"0"を返します。
sample_tuple = ('a', 'b', 'c', 'a')
result = sample_tuple.count('z')
print(result) # 0