タプル 変更できない(immutable)
タプルは()【パレンテス】のなかに配列の要素をいれます。
>>> t = (1, 2, 3, 4, 1, 2)
出力すると>>> t (1, 2, 3, 4, 1, 2)
上の様になります。 型(type)をみると>>> type(t) <class 'tuple'>
tuppleと出力されます。
リストとタプルの違い
タプルでは値の書き換えが出来ません。
>>> t = (1, 2, 3, 4, 1, 2)
t[0]を書き換えようとすると、エラーになります。
>>> t[0] = 100
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
値の書換はできませんが、以下は出来ます。
インデックス1を取り出します
>>> t[1]
2
インデックス -1 を取り出す
>>> t[-1]
2
スライスで3~5番目を取り出す
>>> t = (1, 2, 3, 4, 1, 2)
>>> t[2:5]
(3, 4, 1)
indexメソッド で1の位置を調べると
>>> t.index(1)
0
更にindexメソッド で次の1の位置を調べると
>>> t.index(1, 1)
4
1の数を調べる
>>> t.count(1)
2
タプルのメソッドは少ない count と index
リストと違いタプルのメソッドは2つです。
helpでtupleを見てみます。
>>> help(tuple)
count(self, value, /) Return number of occurrences of value. index(self, value, start=0, stop=9223372036854775807, /) Return first index of value.
タプルは読込専用・書換不能ケースに使用が多い。
タプルにリストを入れる。
ここで、タプル内にリストを入れてみます。
>>> t = ([1, 2, 3], [4, 5, 6])
tを見ると>>> t ([1, 2, 3], [4, 5, 6])
タプルの書き換えは出来ませんが、中のリストの書き換えは出来ます。
例:タプルのインデックス0番目は書き換えできませんが、
>>> t[0] = [1]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
タプル内のリストのインデックス0番目の書き換えは可能
>>> t[0][0]
1
>>> t[0][0] = 100
>>> t
([100, 2, 3], [4, 5, 6])
タプルの宣言 ()パレンティス無しでも良い ,カンマをつけるとタプルになる
t = (1, 2, 3) t = 1,2,3 上記どちらでもタプル宣言になります。
パレンテスなしで宣言してみます。
>>> t = 1, 2, 3 >>> type(t) <class 'tuple'>
>>> t (1, 2, 3)
「,」を入力した時点でタプルになる
カンマ(,)が入るとタプルになります。配列の要素が一つの場合でも(,)があるとタプルになります。
>>> t = 1,
>>> type(t)
<class 'tuple'>
>>> t
(1,)
当然 (1) は int 【整数型】になります。
>>> t = (1) >>> type(t) <class 'int'>
そこで注意です!
空の()はタプルになる
>> t = ()
>>> type(t)
<class 'tuple'>
空でない場合、
,カンマを忘れるとタプルにならない!
>>> t = 1 >>> type(t) <class 'int'> >>> t 1
文字列の場合も、【,】カンマを入れるとタプルになります
>> t = ('test')
>>> type(t)
<class 'str'>
>>> t
'test'
【,】カンマを入れるとタプルになります。
>>> t = ('test',) >>> type(t) <class 'tuple'>
>> t ('test',)
注意エラー(タプル + 数字)
t が int(整数型)であれば、当然計算できます。
>>> t = 1
>>> t + 100
101
しかし、t がタプルであれば計算しようとすると、エラーが返ります。
(タプル + 数字)の場合エラーになります。
>>> t = 1,
>>> t + 100
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can only concatenate tuple (not "int") to tuple
そこで、新しいタプルを作ってみます。
タプルの変更は不可ですが、タプル同士を加えて新しいタプルを作ることは可能です。
>>> new_tuple = (1, 2, 3) + (4, 5, 6) >>> new_tuple (1, 2, 3, 4, 5, 6)
>>> t = 1, 2, 3 >>> n = t + (4, 5, 6) >>> n (1, 2, 3, 4, 5, 6)
また、以下のような場合も注意が必要です。
最初のタプルの要素が一つしかない場合には 【,】カンマを忘れるとエラーが返ってきます。
>>> new_tuple = (1,) + (2, 3, 4) >>> new_tuple (1, 2, 3, 4)
コメント