2016-12-05 101 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)其长期价值其他类似的问题。请[编辑]你的答案以添加一些解释,包括你所做的假设。 –