Python タプル

Python学習【365日チャレンジ!】21日目のマスターU(@Udemy11)です。

21日目というと、3週間の最終日になりますが、3日坊主の次は3週間がポイントだと聞いたことがあります。

どういうわけかわかりませんが、3に関する期間を乗り越えられるかどうかが継続できるかどうかの鍵だそうです。

いまのところ、無理なく毎日のPython学習とブログ記事の投稿ができているので、この調子でしっかりと続けていきたいと思います。

昨日の復習

昨日は、タプルのアンパッキングを学習しました。

>>> t = (1, 2)
>>> a, b = t
>>> t
(1, 2)
>>> a
1
>>> b
2

parenthesesの丸括弧で囲まなくても、,(カンマ)で続ければタプル型になりました。

>>> a = 1, 2, 3, 4
>>> a
(1, 2, 3, 4)

タプルの値は変更できませんが、タプルの中に入れたリストは変更できましたね。

>>> i = [1, 2, 3]
>>> j = [4, 5, 6]
>>> t = (i, j)
>>> t
([1, 2, 3], [4, 5, 6])
>>> t[0][0] = 100
>>> t
([100, 2, 3], [4, 5, 6])

リストと同じように使えるメソッド(index()・count())がありましたし、最も特徴的なのは、設定したタプルは追加や変更ができないことでした。

それでは、このことを踏まえて、タプルの使い方を学習しますよ。

表示した3つの選択肢から2つを選ぶ

例えば、A, B, Cという3つの選択肢の中から、2つを選んでもらうテストをする場合を考えてみます。

choose_two = ('A', 'B', 'C')
answer = []
 
print(choose_two)
 
answer.append('A')
answer.append('C')
 
print(answer)

出力結果

('A', 'B', 'C')
['A', 'C']

タプル型の値の中から選んだ値を変数answerに代入していますが、もちろん変数choose_twoは変更されていません。

間違えた変数を指定してしまうと

Python タプル

最初の変数choose_from_tをリスト型にしても、選んだ値を入れる変数を間違えなければ問題はありませんが、人は間違いを犯すものです。

choose_from_t = ['A', 'B', 'C']
answer = []
 
print(choose_from_t)
 
choose_from_t.append('A')
choose_from_t.append('C')
 
print(answer)
print(choose_from_t)

出力結果

['A', 'B', 'C']
[]
['A', 'B', 'C', 'A', 'C']

選択した値を代入する変数を間違って変数choose_from_tに入れてしまうと、変数answerには何も値が入っておらず、最初に指定した変数choose_from_tに選択した値が追加されてしまいます。

こんなミスしないやろ〜!

と思うかもしれませんが、酒井さんのようなプログラムの専門家が指摘しているわけなので、やってしまうことがあるわけですよね。

タプルならエラーを返してくれる

Python タプル

代入する変数を間違うというミスをしないために、変更されると困るような値を扱うときは、読み込み専用としてタプル型を使うのがベストということです。

タプルで最初の変数を定義しておくと、代入する変数を間違ったとしても、エラーを返してくれるので、そこで間違いに気づくことができます。

choose_f_two = ('A', 'B', 'C')
answer = []
 
print(choose_f_two)
 
choose_f_two.append('A')
choose_f_two.append('C')
 
print(answer)
print(choose_f_two)

出力結果

('A', 'B', 'C')
Traceback (most recent call last):
  File "/~~~~~/day0302.py", line 6, in <module>
    choose_two.append('A')
AttributeError: 'tuple' object has no attribute 'append'

最初のタプルが出力されたあと、選択した値を追加する時点で、「タプルはモジュールのappendは使えません」というエラーが返されるので、間違いだということがわかります。

読み込み専用ならタプル型

この例のように、タプル型を使えば、間違って値を変更してしまうことがないので、読み込み専用の値を扱うのであれば、タプル型がおすすめです。

といいつつも、まだまだ具体的に使うパターンが想像できないので、まずはこのパターンを頭に入れておこうと思います。

話は飛んでしまいますが、調子の悪かったTimeCapsuleに別れを告げて、IO-DATAのネットワーク対応ストレージ(NAS)を導入しました。

NAS IO-DATA Python

ネットを探しても同じような使い方をしていた情報が見つからず、ちょっと苦労したのですが、なんとかデータを移行することができたので、時間ができたときに、データ移行した際のポイントなどを紹介しようと思っています。
と言いつつ、作業している画面をキャプチャするのを忘れていたので、記事にできるかどうか少し心配。

3月に入って、少し春らしくなってきましたが、新型肺炎やインフルエンザに注意しつつ、しっかりとPythonを学んでいきたいと思います。

それでは今日も、Good Python!