型についてのあれこれ(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メソッドの違いについては

インデックスと値を出力

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

ソートして出力

リストや辞書そして集合型などの、いわゆる、データの集まりであるコンテナ内の要素のソート方法に関する話題。

以下を参考に

# キーでソート
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

タプルでは「 () 」(カッコ)、リストでは「 [] 」(大カッコ)で初期化を行いますが、ディクショナリは「 {} 」(中カッコ)を使用 "キー":値

公式ドキュメントより

ページのトップへ戻る