pythonのタプル
pythonのタプルについて
・シーケンス型の1つ。
・リストと似ているが、タプルはcount, index以外のメソッドがない。
・リストは[]、タプルは()または括弧なし。
・immutableな型で、値の変更ができない。
・要素を変更できない。ソートもできない。
・indexとsliceはは使用できる。
・異種データが混じるときはcollectionsライブラリのnamedtupleも選択肢に。
・値を変更しないとき、変更したくないとき、関数の引数にするときによく使う。
・def fun(*args)として、関数のparameterにtupleとして、いくつでも受け取れる。
・内包表記がない。
・要素数 len()関数
○タプルの作成
t1 = (1, 2) #tupleのリテラルは()で。 print(t1) #(1, 2) t2 = 3, 4 #かっこなしでもtupleになる print(t2) #(3, 4) t3 = 0, #要素が1個のときは最後にカンマ print(t3) #(0,) t4 = (2017, ), #2次元tupleになる print(t4) #((2017,),) t5 = tuple([7, 8]) #tuple(iterable) tuple関数 print(t5) #(7, 8) t6 = tuple("abc") print(t6) #('a', 'b', 'c')
・置換、再代入できない。スライスやindexでの参照はできる。
t = (3, 4, 5) print(t[0]) #3 print(t[0:2]) #(3, 4) #t[0] = 10 #TypeError: 'tuple' object does not support item assignment t = (10,) + t[1:] #要素を変更する場合は新たに作り直すことになる。 print(t) #(10, 4, 5) list1 = list(t) #リスト化→代入→再タプル化も可能 list1[0] = 20 t = tuple(list1) print(t) #(20, 4, 5)
・同時代入、アンパック
x = 0 y = 0 r = 5 print(x, y, r) #0 0 5 x, y, r = 3, 4, 5 #x, y, rに同時代入 print(x, y, r) #3 4 5 x, y = y, x #x, yの入れ替え print(x, y, r) #4 3 5 data = ("math", 100) sub, point = data #dataをsubとpointにアンパック print(point) #100
・大小関係 まず[0]要素で比較、同じなら[1]要素で比較。
print((3, 5) > (2, 8)) #True print((3, 2) > (1, 6)) #True print((1, 2) > (1, 2)) #False print((1, 2) > (1, 0)) #True #print((1, 2) > ("", 1))#TypeError: unorderable types: int() > str()
・連結 +
・繰り返し *
t1 = (1, 2) t2 = (10, 20) print(t1 + t2) #(1, 2, 10, 20) print(t1 * 3) #(1, 2, 1, 2, 1, 2)
・文字列タプルからの文字取出し
t = ("abc", "def") print(t[1]) #def print(t[1][0]) #d
・zip()関数 複数のシーケンスから要素の少ないほうに合わせてタプルを作る。
ただし、イテラブルなzipオブジェクトが作られ、list関数やtuple関数で実体化。
あるいはイテレータとしてfor文などで使う。
list1 = ("a", "b") list2 = (1, 2, 3, 4, 5) z = zip(list1, list2) print(z) #<zip object at 0x~> for i in z: print(i) #('a', 1) ('b', 2) t =tuple(zip(list1, list2)) print(t) #(('a', 1), ('b', 2)) l = list(zip(list1, list2)) print(l) #[('a', 1), ('b', 2)]