現有列表如下:
[6, 7, 5, 9, 4, 1, 8, 6, 2, 9]
希望統計各個元素出現的次數,可以看作一個詞頻統計的問題。
我們希望最終得到一個這樣的結果:{6:2, 7:1...}即 {某個元素:出現的次數...}
首先要將這些元素作為字典的鍵,建立一個初值為空的字典:
>>> from random import randint >>> l = [randint(1,10) for x in xrange(10)] >>> l [6, 7, 5, 9, 4, 1, 8, 6, 2, 9] >>> d = dict.fromkeys(l, 0) >>> d {1: 0, 2: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0} # 現在的任務是需要將d中每個鍵所對應的值統計出來 >>> for x in l: >>> d[x] += 1 >>> d {1: 1, 2: 1, 4: 1, 5: 1, 6: 2, 7: 1, 8: 1, 9: 2} # 這就統計完了所有的元素出現的次數
另外一種方法,利用collections模塊中的Counter對象
>>> from collections import Counter # 這個Counter可以直接接受一個列表,將它轉化為統計完成的結果 >>> d = Counter(l) >>> d Counter({6: 2, 9: 2, 1: 1, 2: 1, 4: 1, 5: 1, 7: 1, 8: 1}) # 該Counter對象是字典對象的子類,也可以通過鍵來訪問對應值 >>> d[6] 2 # Counter對象方便之處在於它內置有most_common(n)方法,可以直接統計出前n個最高詞頻 >>> d.most_common(2) [(6, 2), (9, 2)]
下面進行實踐,對某篇文章進行詞頻統計,得到詞頻最高的十個詞。
>>> import re >>> from collections import Counter >>> txt = open('CodingStyle.txt').read() >>> new_txt = re.split('\W+', txt) >>> result = Counter(new_txt) >>> result.most_common(10)