2016-12-05 128 views
-6

我想算一個字計數字母頻率

word = input("Enter a word") 

Alphabet=['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'] 

for i in range(0,26): 
    print(word.count(Alphabet[i])) 

的每個字母的出現目前這種輸出的次數,每個字母出現包括不感興趣。

如何列出的字母垂直頻率沿着它如:

字= 「你好」

H 1

ë1

大號2

Ø 1

+0

30秒的搜索將顯示你可以使用'collections.Counter'。 – Pythonista

+2

這看起來像一個家庭作業問題,因此您可能需要閱讀[這些指導方針](http://meta.stackoverflow.com/a/334823/99127)關於如何在SO上提出這樣的問題。我會稍後發佈一些答案。 – evadeflow

回答

5
from collections import Counter 
counts=Counter(word) # Counter({'l': 2, 'H': 1, 'e': 1, 'o': 1}) 
for i in word: 
    print(i,counts[i]) 

嘗試使用Counter,它將創建一個包含集合中所有項目頻率的字典。

否則,只有在word.count(Alphabet[i])大於0的情況下,您纔可以將當前代碼的條件設置爲print,儘管這會更慢。

0

跟着LMc說了什麼,您的代碼已經非常接近功能,您只需要後處理結果集以刪除「無趣」輸出。下面就來讓你的代碼工作的一種方式:

#!/usr/bin/env python 
word = raw_input("Enter a word: ") 

Alphabet = [ 
    'a','b','c','d','e','f','g','h','i','j','k','l','m', 
    'n','o','p','q','r','s','t','u','v','w','x','y','z' 
] 

hits = [ 
    (Alphabet[i], word.count(Alphabet[i])) 
    for i in range(len(Alphabet)) 
    if word.count(Alphabet[i]) 
] 

for letter, frequency in hits: 
    print letter.upper(), frequency 

但使用collections.Counter的解決方案更優雅/ Python的。

0
def char_frequency(str1): 
    dict = {} 
    for n in str1: 
     keys = dict.keys() 
     if n in keys: 
      dict[n] += 1 
     else: 
      dict[n] = 1 
    return dict 
print(char_frequency('google.com')) 
+6

感謝您使用此代碼段,這可能會提供一些有限的短期幫助。通過展示*爲什麼*這是一個很好的解決方案,並且使它對未來的讀者更有用,一個正確的解釋[將大大提高](// meta.stackexchange.com/q/114762)其長期價值其他類似的問題。請[編輯]你的答案以添加一些解釋,包括你所做的假設。 –