タプル(tuple)
前回、PythonのグラフィックスライブラリTurtleで複数のTurtleを同時(っぽく)に動かす方法を紹介しました。
今回は一度Pythonの基礎に戻ってタプル(tuple)に関して、作成と要素の取得・挿入を色々と試していきます。
というのもこれまでリストばかり使っていたのですが、タプルを使わなければいけない場面に遭遇し、それならばちょっと勉強してみようというのが発端です。
リストは要素を変更したり、追加、削除が自由にできるミュータブル(変更可能)なオブジェクトですが、タプルは変更や削除ができない(ただし要素の追加はできる)イミュータブル(変更不可)なオブジェクトです。
ということで今回はタプルの作成、要素の取得・追加を勉強していきます。
それでは始めていきましょう。
タプルの作成
まずはタプルを作成してみます。
リストを作成する場合は要素を角括弧([])で囲みましたが、タプルの場合は普通の括弧(())で囲みます。
ということで空のタプルを作成する場合はこんな感じです。
tup = ()
print(tup)
実行結果
()
また要素を追加した状態でタプルを作成する場合は「(要素1, 要素2, 要素3…)」とします。
tup = (1, 2, 3)
print(tup)
実行結果
(1, 2, 3)
多次元のタプル
タプルの中にタプルを入れ込むことで2次元以上のタプルを作成することができます。
tup = ((1,1), (2,2), (3,3))
print(tup)
実行結果
((1, 1), (2, 2), (3, 3))
またタプルの中にリストを入れ込むことも可能です。
tup = ([1,1], [2,2], [3,3])
print(tup)
実行結果
([1, 1], [2, 2], [3, 3])
逆にリストの中にタプルを入れ込むことも可能です。
ls = [(1,1), (2,2), (3,3)]
print(ls)
実行結果
[(1, 1), (2, 2), (3, 3)]
要素の取得
要素の取得はリストと同様に「タプル[インデックス]」とします。
tup = (1, 2, 3)
print(tup[1])
実行結果
2
タプルの作成が通常の括弧だからと言って、通常の括弧を使って取得しようとするとエラーとなります。
tup = (1, 2, 3)
print(tup(1))
実行結果
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Cell In[34], line 3
1 tup = (1, 2, 3)
----> 3 print(tup(1))
TypeError: 'tuple' object is not callable
要素の追加
タプルに要素を追加するにはリストで要素を追加する「append」やSet型に要素を追加する「add」などは使えません。
tup = (1, 2, 3)
tup.append(5)
print(tup)
実行結果
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
Cell In[35], line 3
1 tup = (1, 2, 3)
----> 3 tup.append(5)
5 print(tup)
AttributeError: 'tuple' object has no attribute 'append'
tup = (1, 2, 3)
tup.add(5)
print(tup)
実行結果
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
Cell In[36], line 3
1 tup = (1, 2, 3)
----> 3 tup.add(5)
5 print(tup)
AttributeError: 'tuple' object has no attribute 'add'
タプルに要素を追加するには、「タプル1+タプル2」というようにタプルを連結します。
tup = (1, 2, 3)
tup = tup + (5, 6)
print(tup)
実行結果
(1, 2, 3, 5, 6)
ただし直接連結する際は要素1つのタプルでは連結できないようなので注意してください。
tup = (1, 2, 3)
tup = tup + (5)
print(tup)
実行結果
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Cell In[38], line 3
1 tup = (1, 2, 3)
----> 3 tup = tup + (5)
5 print(tup)
TypeError: can only concatenate tuple (not "int") to tuple
多次元のタプルの場合、一つの要素を連結すると1次元の状態で連結されてしまうので注意です。
tup = ((1,1), (2,2), (3,3))
tup = tup + (5,5)
print(tup)
実行結果
((1, 1), (2, 2), (3, 3), 5, 5)
また括弧を二重にしても1次元の状態で連結されます。
tup = ((1,1), (2,2), (3,3))
tup = tup + ((5,5))
print(tup)
実行結果
((1, 1), (2, 2), (3, 3), 5, 5)
複数の要素が多次元の状態で入っている場合は多次元の状態で連結されます。
tup = ((1,1), (2,2), (3,3))
tup = tup + ((5,5), (6,6))
print(tup)
実行結果
((1, 1), (2, 2), (3, 3), (5, 5), (6, 6))
タプルの要素の追加・挿入・変更
タプルに要素を挿入したり、要素を変更する場合は一度リストに変換します。
またリストに変換することで「append」で要素を追加することもできます。
tup = (1, 2, 3)
ls = list(tup)
ls.append(5)
ls.insert(2, 6)
ls[3] = 7
tup = tuple(ls)
print(tup)
実行結果
(1, 2, 6, 7, 5)
なんとなくタプルとリストの違いが分かってきました。
リストに変換することで要素を変更できるとはいえ一手間かかってしまうので、変更する可能性があるものはリスト、変更する可能性がないものはタプルとして使い分けるのがいいのかなと思います。
次回はSet型を使って多次元のリストやタプルの重複を削除する方法法を紹介します。
ではでは今回はこんな感じで。
コメント