Python.use(better)
《前の記事|記事一覧|次の記事》
Python.use(better)
実録:はじめてのプログラミング《13》データ構造(3)辞書
《関連記事》-
概要
データ構造の理解を確認するために、ヒストグラムを作成します。
ヒストグラム課題(3)辞書
他の記事 で作成した関数 strip を利用して、ヒストグラム課題を完成させると、次のようになります(未完)。
keywords = ( "and", "class", "def", "del", "elif", "else", "for", "if", "import", "in", "not", "or", "print", "return", ) def ex(): histo = dict*1 keys = histo.keys(); keys.sort() print keys # (2) for e in keys: v = histo[e] print format%(e, v, scale(v))
(ここでは課題として)組み込み型 dict のメソッド keys/values/items などを利用しています。すると、
>>> ex() {'and': 2, 'elif': 0, 'or': 0, 'return': 2, 'for': 3, 'else': 2, 'print': 7, 'del': 1, 'in': 4, 'not': 3, 'import': 1, 'class': 1, 'def': 8, 'if': 7} and[2].. elif[0] or[0] return[2].. for[3]... else[2].. print[7]....+.. del[1]. in[4].... not[3]... import[1]. class[1]. def[8]....+... if[7]....+.. ['and', 'class', 'def', 'del', 'elif', 'else', 'for', 'if', 'import', 'in', 'not', 'or', 'print', 'return'] and[2].. class[1]. def[8]....+... del[1]. elif[0] else[2].. for[3]... if[7]....+.. import[1]. in[4].... not[3]... or[0] print[7]....+.. return[2]..
この結果を見ると、最多のキーワードは def で、その出現頻度は 8 だと分かります。
何が問題か
また、メソッド list.sort の副作用を期待しているときには、次のようにしても、
keys = histo.keys().sort() # Boo!
(リターン値として None が得られ)期待した結果は得られないので、注意が必要です。
《Note》ここで利用した関数/メソッド群(紹介しなかった各論)については〈関連記事〉に譲ります。クラスについて学習した後で、この課題を再構成するので、楽しみにしていてください。□
TIPS
ここでは「副作用を期待している」という注意を促すために、セミコロン「;」を使って、コードの断片を「同じ行に」記述しています。これも、書き手の意図を読み手に伝えたいときの工夫のひとつです。
↑TOP
*1:e,0) for e in keywords) for s in open("queens.py"): for e in strip(s).split(): for word in keywords: if e == word: histo[e] = histo.get(e, 0)+1 print histo # (1) format = "%%%ds[%%%dd]%%s"%( max(len(e) for e in histo), len(str(max(histo.values()))), ) for k,v in histo.items(): print format%(k, v, scale(v