型についてのあれこれ(8) - コレクションとfor文
シーケンス型とfor文
for文を使ってシーケンス型の要素をひとつずつ取り出すことができる。
# 文字列の例 for s in "abc" : print s # タプルの例 for s in ('d','e','f') : print s # リストの例 for s in ['g','h','i'] : print s
for文とiter関数
for文は実はイテレータiter関数を使って値を取り出している。
# 文字列の例 for s in itr("abc") : print s
多次元配列
リストやタプルを入れ子にして多次元配列を表すことができる。 以下に例を示す。
tpl_2d = ((0,1,2),(3,4,5),(6,7,8)) lst_2d = [[9,10,11],[12,13,14],[15,16,17]] for i in xrange(0,3): for j in xrange(0,3): print "tpl_2d[{}][{}]={}".format(i,j,tpl_2d[i][j]) print "list_2d[{}][{}]={}".format(i,j,lst_2d[i][j])
dict型とfor文
forループを使って辞書の値を取得する。
イテレータ対応のデータ型 - 関数型プログラミング HOWTO — Python 2.7ja1 documentation
辞書は iter() を適用するとキーでループを回しますが、辞書には他のイテレータを返すメソッドもあります。明示的にキー、値、あるいはキーと値のペアでイテレートしたければ、 iterkeys(), itervalues(), iteritems() というメソッドでイテレータを作ることができます。
辞書にはイテレータを返すメソッドが複数存在していて、必要に応じて使い分けることができる。
イテレータが返す値の順番は基本的にランダム。
#coding: UTF-8 # iter() を適用するとキーでループを回す dic = {"key0": "value0","key1": "value1","key2": "value2"} for key in dic: print key # 順番は基本的にランダム # または明示的にキーを返すイテレータを指定して for key in dic.iterkeys(): print key # itemsメソッド:キーと値のペアを取得。 for key, value in dic.items(): print "key={0} , value={1}".format(key,value) # iteritemsメソッド:キーと値のペアを取得。 for key, value in dic.iteritems(): print "key={0} , value={1}".format(key,value) # 値を返すイテレータitervaluesを指定して for value in dic.itervalues(): print value
itemsメソッドとiteritemsメソッドの違いについては
- Pythonのitems()とiteritems()の違い - 真面目に、強く、上品に
python2ではiteritemsを使ったほうが良いっぽい。
でもpython3ではiteritemsは廃止なのでitemsを使う。
インデックスと値を出力
enumerate関数 を使うと順番(インデックス)を付加することができる
# インデックスも付加して出力(リストの場合) for i,s in enumerate(['g','h','i']) : print i, s # 辞書の場合は # インデックスも付加してキーを出力 for i,s in enumerate(dic) : print i, s # インデックスも付加して値を出力 for i,s in enumerate(dic.itervalues()) : print i, s # iteritemsメソッド:キーと値のペアを取得。 for i, (key, value) in enumerate(dic.iteritems()): print "index={0} , key={1} , value={2}".format(i, key, value)
enumerate関数にはstart値(デフォルトは0)を指定する引数が存在する。
for i,s in enumerate(['g','h','i'], 100) : print i, s
実行結果
100 g 101 h 102 i
ソートして出力
リストや辞書そして集合型などの、いわゆる、データの集まりであるコンテナ内の要素のソート方法に関する話題。
以下を参考に
- Python Tips:dict(辞書)型の中身をソートしたい - Life with Python
- Pythonでコレクション型をソート - Qiita
- Pythonの辞書(dict型)をvalue値でソート - プログラミング工場 / Python
# キーでソート for key in sorted(dic): print key # 値でソート for key in sorted(dic.itervalues()): print key # キーでソート(キーと値のペアを取得。) for key, value in sorted(dic.iteritems()): print "key={0} , value={1}".format(key,value) # 値でソート(キーと値のペアを取得。) for key, value in sorted(dic.iteritems(), key=lambda x:x[1]): print "key={0} , value={1}".format(key,value) # ソートして、インデックスと値を出力 # キーでソート for key in enumerate(sorted(dic)): print key # 値でソート for key in enumerate(sorted(dic.itervalues())): print key # キーでソート(キーと値のペアを取得。) for i, (key, value) in enumerate(sorted(dic.iteritems())): print "index={0} , key={1} , value={2}".format(i, key, value) # 値でソート(キーと値のペアを取得。) for i, (key, value) in enumerate(sorted(dic.iteritems(), key=lambda x:x[1])): print "index={0} , key={1} , value={2}".format(i, key, value)
辞書ビューオブジェクト
辞書ビューオブジェクトを使う事でさらにいろいろと辞書からデータを取り出す事ができる。
型に対するまとめ と 参考URL
タプルでは「 () 」(カッコ)、リストでは「 [] 」(大カッコ)で初期化を行いますが、ディクショナリは「 {} 」(中カッコ)を使用 "キー":値
公式ドキュメントより