こんにちは。 PyQチームのkonieです。
前回私の記事でお話しましたが、Pythonを独学しています。
これからもPython初心者の私が実際に独学を続け、つまずいているところ、それをどうやって乗り越えることができたのか皆さんと共有していきたいと思っています。
今回はいまいち使い方が分からなかったタプルについて書いていこうと思います。
タプルに関する疑問
私は、最近Python学習をしていてタプルの使い方について疑問を持ちました。
タプル
タプルはリストに似たシーケンス型のオブジェクトです。要素の参照は、リストと同様にインデックスを指定します。
URL:https://blog.pyq.jp/entry/news_contents_180702
リストとタプルは複数のデータをまとめる役割で使います。
これらはよく似ていますが、リストは後から中身のデータを変更できますが、タプルはできないところが異なります。
私はPyQのタプルの問題を解くことには時間がかかりませんでしたが、タプル、リスト、辞書の違いが明確に理解することができなくて、
どうして変えられるものと変えれらないものがあるんだろう?どういった場面で使い分けるの?と、悩んでいました。
その中でも辞書のキーとしてタプルは使えるけどリストは使えないのはなぜだろう?ということがタプルの使い方で一番疑問に思っていました。
今回、この悩みを解決するために改めてタプルと向き合うことにしました。
使い道が分からなかったタプルの例題
これは私が使い道について考え込んだタプルの例題です。
def main(): japan = (36, 140) china = (40, 116) singapore = (37, 127) country_dict = { japan: 'japan', china: 'china', singapore: 'singapore' } for country_coordinate, country_name in country_dict.items(): latitude, longitude = country_coordinate print(latitude, longitude, country_name) if __name__ == "__main__": main()
このプログラムでは
まずdef文で関数を作成します。
japan、china、singaporeそれぞれに2つの数値が入ったタプルを代入します。
次にcountry_dictという名前の辞書を作成し、キーには2〜4行目で使用した国名を、値にはそれぞれ文字列を入れます。
for文で辞書から値を取り出し(country_coordinate)その後country_coordinateのタプルの値を2つの変数に( latitude, longitude)に代入して最後にprint関数で表示します。
このように処理されるのですが、私はどうしてこういう辞書のキーとしてタプルは使う形にして書くのかわかりませんでした。
リストとタプルの違い
ある日いちばんやさしいPythonの教本を読んでいた時に本の中で「タプルを使ってみよう」という問題が出てきました。そこではタプルの中に十二支の名前を1つずつ入れていました。
eto_tuple = ('子', '丑', '寅', '卯', '辰', '巳', '午', '未', '申', '酉', '戌', '亥')
これを見て、タプルが必要なケースをイメージできるようになりました。干支の概念は定義が変わらない限り変わらない。その変わることのないデータが手元が狂った時などに変わってしまう恐れがあるからタプルを使うんだ!ということに気づいたのです。
こうしてどうして変えられるのと変えられないのがあるんだろう?どういった場面で使い分けるの?という疑問は解決しました。
2つの値が1セットで扱われている時に使う
リストとタプルの使い分けが理解できたので、これを踏まえてもう一度私が解くのに考え込んだ問題に向き合います。 その際PyQのドキュメントをみたり、PyQの過去の質問でも自分と同じような問いを抱えている人がいないのか探してみました。
すると タプルには
- 辞書のキーは値が変更できない(イミュータブル)ことからキーにリストを指定できない
- 辞書のキーにタプルを指定する場合は2つの値が1セットで扱われている時などに使用する
特徴があることが分かりました。
まだ使いどころは、完全に理解できないけれど、2つの値が1セットで扱われているものが現れた時に使うことが分かったので前進できた気がしました。
今後の学習計画・目標
辞書のキーにタプルが使え、リストが使えないことがわかりました。
これからもっと勉強していく中で、今回のように辞書のキーにタプルを使う場面はどういう時なのかを考えたり、実際に使う時にしっかりと使えるように復習を怠らないようにしたいと思います。
これで一旦タプルについては自分の中で解決した、ということで次に進みます。
働きながら勉強するのは正直とても大変ですが、とりあえずPyQの初級を終わらせるのを目標にこれからも独学を続けていきます。