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 回答