2017-12-03 7 views
0

私は長いPythonリストを持っており、1文字の出現回数を数えたいと思います。たとえば、「o」が発生する合計時間は何回ですか?私はN = 4が欲しい。python list.countは常に0を返します

lexicon = ['yuo', 'want', 'to', 'sioo', 'D6', 'bUk', 'lUk'], etc. 

list.count()は明白な解決策です。しかし、それは一貫して0を返します。私が探している文字は問題ではありません。私は私のファイルをダブルチェックしました - 私が探している文字は間違いなくそこにあります。

for i in range(100): 
    # random sample 500 words 
    sample = list(set(random.sample(lexicon, 500))) 
    C1 = ['k'] 
    total = sum(len(i) for i in sample) # total words 
    sample_count_C1 = sample.count(C1)/total 

をしかし、それは同様に、リスト「辞書」の上に、forループの0外を返します。私は、forループのカウントを()を計算することが起こります。私はカウンター全体のリストを望んでいないので、私はカウンターが動作するとは思わない。

アイデア?

+0

はPython 2の整数除算ではありませんか? –

+0

oh: 'sample.count(C1)'は単語として 'c 'を数えます。 –

+0

私はPython 2で作業していません。そして、合計で除算を除いて0を返します。 – MeC

答えて

1

私たちはあなたのlist(付属の短縮版を)取る場合:

lexicon = ['yu', 'want', 'to', 'si', 'D6', 'bUk', 'lUk'] 

その後、我々はsum()を使用して、カウントしてgenerator-expression得ることができます:cが言う、だったらそう

count = sum(s.count(c) for s in lexicon) 

を、 'k'これはに2つの出現があるのでkとなる。


これはfor-loopかで動作しますので、あなたは、自分でも広いコードにこれを組み込むことができるはずです。最新の編集で


、私はこれがあなたの修正リストに'o'ため4のカウントを生成することを確認することができます。

+0

オススメして申し訳ありませんが、downvoterを再考してください。 –

+0

このコードはうまくいくようです。 OPが実際に望んでいるものを解釈するのは難しい。 – quamrana

+0

@quamranaあなたは彼らのコメントを見ていますか?それは問題を幾分明らかにする。 –

0

質問が正しく理解されている場合は、リスト内の各単語の各文字の出現回数をカウントします。これは周波数分布として知られています。ここで

freq_distを使用しCounter

from collections import Counter 
lexicon = ['yu', 'want', 'to', 'si', 'D6', 'bUk', 'lUk'] 
chars = [char for word in lexicon for char in word] 
freq_dist = Counter(chars) 
Counter({'t': 2, 'U': 2, 'k': 2, 'a': 1, 'u': 1, 'l': 1, 'i': 1, 'y': 1, 'D': 1, '6': 1, 'b': 1, 's': 1, 'w': 1, 'n': 1, 'o': 1}) 

を使用して簡単な実装である、あなたは文字の出現回数を返すことができます。

freq_dist.get('a') 
1 

# get() method returns None if character is not in dict 
freq_dist.get('4') 
None 
+0

よかった、素敵な熱心なアルゴリズム。 – quamrana

0

sample.count('K')意志を文字列としてkと一致するので、それはゼロを与えています。 bukまたはlukは考慮されません。 文字の頻度を計算したい場合は、このようにしてください

for i in range(100): 
    # random sample 500 words 
    sample = list(set(random.sample(lexicon, 500))) 
    C1 = ['k'] 
    total = sum(len(i) for i in sample) # total words 
    sample_count=sum([x.count(C1) for x in sample]) 
    sample_count_C1 = sampl_count/total 
関連する問題