我正在为一个项目编写一些代码,基本思路是逐行读取文件中的内容并记录其中包含的每个数值的频率。对于将来的分析,重要的是要知道它有多少值以及它们每行发生的频率,因此我不能将该文件视为“数字包”而只计算每个数据的总和。 / p>
我最初的概念是生成一个空列表,并且对于列表中的每个数字索引到目前为止(数字10将在valueList [10]等处),然后为该值的每个发生率增加该位置的值“ 10" 。我很容易在线计数器上捕获这些信息,同时也为我提供逐行数据。
我(显然)是Python的新手。我对其他语言很熟悉,但之前大部分时间都已完成嵌入式编程,因此我不了解更高级别的功能等。有没有“最佳实践”或更强大的方法来实现这一点,而不是我所描述的?
干杯, 将
答案 0 :(得分: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})
答案 1 :(得分: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