Python 入門 ノート (12)タプル

タプル 変更できない(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)

コメント