1

現在、プロジェクトのコードを少し作成しています。基本的な考え方は、ファイルの内容を行ごとに読み取り、含まれている各数値の頻度を記録することです。将来の分析では、値がいくつあったか、および行ごとにそれらが発生した頻度の両方を知ることが重要であるため、ファイルを「数字のバッグ」として扱い、それぞれの合計を数えることはできません。

私の最初のコンセプトは、空のリストを生成し、そのリストに沿った各番号インデックス (10 番は valueList[10] など) に対して、値「10」が発生するたびにその位置の値をインクリメントすることでした。行ごとのデータを提供するために、行カウンターでもその情報を取得するのは簡単です。

私は(明らかに)Pythonの初心者です。私は他の言語に精通していますが、以前はほとんど組み込みプログラミングを行っていたので、より高いレベルの機能などについては詳しくありません。これを行うための「ベストプラクティス」またはより堅牢な方法はありますか?

乾杯、ウィル

4

2 に答える 2

1

ここでは辞書の方が適していますcollections.Counter()。を使用listすることはお勧めできません。テキスト ファイルに存在する一意の数字の数がわからない可能性があり、数字が欠落している場合はスパース リストになる可能性があるからです。

例:

In [16]: text="""1                      
2
3
4
5
5
1
2
5
3"""

In [17]: from collections import Counter

In [18]: c=Counter()      

In [19]: for num in text.splitlines():    
    c[num]+=1
   ....:     

In [20]: c
Out[20]: Counter({'5': 3, '1': 2, '3': 2, '2': 2, '4': 1})
于 2013-04-26T09:23:56.393 に答える
0

リストよりも辞書を使用する方がはるかに簡単です...

def inc_count(d, number):
    try:
        d[number] += 1
    except KeyError:
        d[number] = 1

def dump_counts(d):
    for k in sorted(d):
        print 'Number %d occurred %d times' % (k, d[k])

>>> d = {}
>>> inc_count(d, 10)
>>> inc_count(d, 10)
>>> inc_count(d, 11)
>>> dump_counts(d)
Number 10 occurred 2 times
Number 11 occurred 1 times
于 2013-04-26T09:24:38.180 に答える