2016-12-05 14 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

E 1

L 2

O 1

+0

30秒間の検索では、 'collections.Counter'を使用できることが明らかになりました。 – Pythonista

+2

これは宿題のように思えますので、[このガイドライン](http://meta.stackoverflow.com/a/334823/99127)を読んで、そのような質問をどうやって行うのかを知りたいかもしれません。私はすぐにいくつかの回答を投稿します。 – 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を試してください。これにより、コレクション内のすべてのアイテムの頻度を含む辞書が作成されます。

それ以外の場合は、printの条件をword.count(Alphabet[i])が0より大きい場合に限り行うことができますが、それは遅くなります。

0

あなたのコードは機能にかなり近いと言いましたが、結果セットを後処理して「面白い」出力を取り除く必要がありました。

#!/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)は、*なぜ*これが問題の良い解決策であるかを示すことで長期的な価値を向上させ、将来の読者にとって他の同様の質問。あなたの前提を含め、あなたの答えを[編集]して説明を加えてください。 –