Python.use(better)
■ 事例:モジュールを起動する
□ 全項目を確認する
全ステップの「項目」を確認するには、関数 do を利用します。
$ python scale.py >>> do() ... 10: step_histo -- Histogram ... >>>
□ 各項目を実行する
各ステップの「動作」を確認するには、関数 do に実引数を指定します。
>>> do(10) >>> # -------------------------------------------------- step_histo 0[ 7]....+.. 1[12]....+....1.. 2[13]....+....1... 3[ 8]....+... 4[13]....+....1... 5[ 8]....+... 6[12]....+....1.. 7[13]....+....1... 8[ 9]....+.... 9[ 5]....+ sum: 100 min: 5 [9] max: 13 [2, 4, 7] >>>
100 個の乱数(0 から 9 までの整数)を生成します。
- 発生した乱数の総数 sum は、100 になります。
- 最小頻度 min の乱数は、9 になります。
- 最大頻度 max の乱数は、2, 4, 7 になります。
■ 事例:コードの解説
def scale(n, offset=1): s = [] for e in range(offset,n+offset): c = "." if not e%10: c = str(e//10) elif not e%5: c = "+" s.append(c) return "".join(s) ## ---------------------------------------- histo = {} #1: for _ in range(100): n = randint(0, 9) histo[n] = histo.get(n, 0) + 1 for k,v in histo.items(): #2: print("{0:d}[{1:2d}]{2}".format(k, v, scale(v))) print("sum:",sum(histo.values())) for e in "min","max": #3: value = eval("%s(histo.values())"%e) s = [k for k,v in histo.items() if v==value] print("%s: %d %s"%(e,value,s))
□ #1: dict.get
histo = {} #1:
for _ in range(100):
n = randint(0, 9)
histo[n] = histo.get(n, 0) + 1
変数 histo は、ヒストグラム(度数分布)を管理します。メソッド get を利用すると、
- 乱数 n がキーに含まれるなら、対応する値が得られ、
- 乱数 n がキーに含まれないなら、規定値 0 が得られるので、
同じ乱数 n が見つかると、対応する値をひとつずつ増やします。
□ #2: dict.values
for k,v in histo.items(): #2: print("{0:d}[{1:2d}]{2}".format(k, v, scale(v))) print("sum:",sum(histo.values()))
メソッド values を利用すると、ヒストグラム histo の値要素を列挙する、ジェネレーターが得られます。
- 組み込み関数 sum によって、値要素の総和が得られます。
□ #3: dict.items
for e in "min","max": #3: value = eval("%s(histo.values())"%e) s = [k for k,v in histo.items() if v==value] print("%s: %d %s"%(e,value,s))
メソッド items を利用すると、ヒストグラム histo の要素対 k,v を列挙する、ジェネレーターが得られます。
- 組み込み関数 min によって、値要素の最小値 value が得られます。
- 組み込み関数 max によって、値要素の最大値 value が得られます。
- 一時変数 s には、最大値/最小値 value と同じ値要素 v を持つ、キー要素 k を列挙したリストを保持します。
》こちらに移動中です《
↑TOP