Python.use(better)

《前の記事|記事一覧|次の記事》
Python.use(better)


Python はじめました

課題:ヒストグラム



世の中は苦難に満ちているが
またその克服にも満ちている
Helen Keller - Wikipedia

《関連記事》

■ 事例:モジュールを起動する
□ 全項目を確認する

全ステップの「項目」を確認するには、関数 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


関連記事

Last updated♪2009/11/04