3

テキスト内の文字の出現を提示する必要があります。文字の 1 つが出現しない場合は、ゼロを表示し、出力をアルファベット順に並べ替える必要があります。次の Python コードを用意しました。質問は、出現しない文字に対してゼロを表示する方法と、リスト キーに基づいてリスト値を並べ替えて出力を並べ替える方法です。

 fdist = Counter(c for c in f.lower() if c.isalpha())
 print sorted(fdist.items()) #only to show the output details
 print fdist.values()

サンプル テキストの出力は次のようになります。

[('a', 46), ('b', 5), ('c', 11), ('d', 22), ('e', 76), ('f', 13), ('g', 7), ('h', 29), ('i', 30), ('j', 1), ('k', 6), ('l', 21), ('m', 11), ('n', 34), ('o', 31), ('p', 6), ('q', 1), ('r', 24), ('s', 32), ('t', 52), ('u', 7), ('v', 2), ('w', 10), ('y', 11)]

[46, 11, 5, 76, 22, 7, 13, 30, 29, 6, 1, 11, 21, 31, 34, 1, 6, 32, 24, 7, 52, 10, 2, 11]

出力は次のようになります。

[46, 5, 11, 22, 76, 13, 7, 29, 46, 1, 6, 21, 11, 34, 31, 6, 1, 24, 32, 52, 7, 2, 10, 0, 11, 0]
4

4 に答える 4

2

このようなもの(今のところソート部分は無視してください)?

import string

result = [fdist.get(l, 0) for l in string.letters]

また

result = [fdist.get(l, 0) for l in string.ascii_lowercase]

小文字のみを扱っているため

于 2013-07-18T08:25:50.693 に答える
0
#!python
import string
from collections import Counter

fdist = Counter(string.lowercase)
for k in fdist.keys():
    fdist[k] = 0 

# process your data:
for c in f:
    if c.isalpha():
        fdist.update(c.lower())

# print it
print [fdist[k] for k in sorted(fdist.keys())]
于 2013-07-18T08:43:19.533 に答える
0

出力にはゼロ項目は含まれません。Counter関数をもう一度見て、カウントがゼロの項目を生成するようにする必要があるかもしれません。@danodonovanのソリューションを実装するだけで十分です。

from string import ascii.lowercase as letters

fdist = [(letter, 0) for letter in letters]

次に、必要に応じて更新し、並べ替えられたリストを次のように出力します

result = [entry[1] for entry in fdist]

に正しい値を入れるには、これで十分なはずですresult

于 2013-07-18T08:43:22.623 に答える