プログラミング初心者の勉強ブログ #92
PyQ(https://pyq.jp/)によるPython学習記録です。Rubyを多少かじり、第二外国語としてPythonを少しづつ学んでいきます。(内容はRubyとの比較が多くなるかもしれません。)
今回はリストや辞書、タプルなどのイテラブルなオブジェクトと、リストで利用する「内包表記」についてまとめていきます。
目次
[toc]
イテラブルなオブジェクトとは
まずはイテラブル(反復可能)なオブジェクトとは何なのかについてです。
for 文で繰り返せるオブジェクト
例えば range, リスト, タプル, 集合, 辞書, 文字列は、イテラブルです。 もう少しちゃんと言えば、for 文の in に書き込めるオブジェクトです。
そのオブジェクトを対象に、forで繰り返し文を作成できるものがイテラブルなオブジェクトです。今回まとめるリスト、タプル、集合、辞書は全てイテラブルなオブジェクトに該当し、かつ「コンテナデータ型」という区分であらかじめPythonに組み込まれている型です。
Rubyでいう「配列」がPythonのリスト、「ハッシュ」が辞書のイメージです。集合はRubyでは配列でやっていた気がするし(setメソッドはあるらしい)、タプルみたいなものはなかった気がするので違いを考えると面白いです。
リスト(list)
Rubyでいう配列。「lst = [ ‘a’, ‘b’, ‘c’ ]」のように「 [ ] 」とカンマで定義。index番号で取り出せる。
タプル(tuple)
「tpl = ( ‘a’, ‘b’, ‘c’ )」のように「 ( ) 」とカンマで定義。要素が一つの場合「tpl = ( ‘a’, )」の様に後ろにカンマを付けることでタプルだと判断される。(カンマなかったらただ’a’を代入することになってしまう。)リストと違い要素の変更ができない。タプルであることが自明の場合、「 ( ) 」は省略可能。
集合(set)
「s = { ‘a’, ‘b’, ‘c’ }」のように「 { } 」とカンマで定義。空の状態は「set( )」。変更ができない(イミュータブル)なものしかいれることができない。同じ要素は重複して入れられない。(入れても1つになる)集合体のオブジェクトなので順番がなく、専用の関数でリストより高速な探索が可能。
辞書(dict)
Rubyでいうハッシュ。「d = { ‘a’: 1, ‘b’: 2, ‘c’: 3 }」のように「 { } 」とコロンとカンマで「キー」と「バリュー」を定義する。キーに対応するバリューが取得できる。(d[‘a’]で1を取得。)キーはイミュータブルのものしか定義できず、バリューは特に何でも良い。同じキーは1つのみ持たせることができる。
内包表記について
下のコードは「fruits」という辞書(dict)を作り、そこからフルーツの名前を取得してリストに格納するものです。
fruits = {'apple': 150, 'orange': 100, 'grape': 300} lst = [fruit for fruit, price in fruits.items()] print(lst) # -->['apple', 'orange', 'grape']
内包表記は
lst = [fruit for fruit, price in fruits.items()]
この書き込みであり、これは
lst = [] for fruit, price in fruits.items(): lst.append(fruit)
というfor文の書き込みと同じです。このように繰り返し文などを内包し1行にまとめて記述ができます。
まとめ
PyQ初めてまだ最初の方ですが、意外と難しい問題もあり面白いです。言語によってコロンだったりセミコロンだったり、Trueの頭が大文字だったり細かい部分での違いがややこしかったりします。
以上ありがとうございました。