使用python生成字符串中包含的数值索引

使用python生成字符串中包含的数值索引,python,python-3.x,text-parsing,string-parsing,Python,Python 3.x,Text Parsing,String Parsing,我现在正在为一个项目编写一些代码,基本思想是逐行读取文件中的内容,并记录其中包含的每个数值的频率。对于未来的分析来说,重要的是要知道每行有多少个值,以及它们发生的频率,所以我不能将该文件视为一个“数字包”,而只是计算每个值的总数 我最初的想法是生成一个空列表,对于列表中的每个数字索引(数字10将位于valueList[10]等),然后为值“10”的每个关联增加该位置的值。对我来说,在行计数器上捕获这些信息很容易,也可以给我逐行的数据 我(显然)是Python的新手。我熟悉其他语言,但以前大部分都

我现在正在为一个项目编写一些代码,基本思想是逐行读取文件中的内容,并记录其中包含的每个数值的频率。对于未来的分析来说,重要的是要知道每行有多少个值,以及它们发生的频率,所以我不能将该文件视为一个“数字包”,而只是计算每个值的总数

我最初的想法是生成一个空列表,对于列表中的每个数字索引(数字10将位于valueList[10]等),然后为值“10”的每个关联增加该位置的值。对我来说,在行计数器上捕获这些信息很容易,也可以给我逐行的数据

我(显然)是Python的新手。我熟悉其他语言,但以前大部分都做过嵌入式编程,因此我对高级函数等不太了解。有没有“最佳实践”或比我描述的更健壮的方法来实现这一点

干杯,
如果词典在这里更合适,请使用
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})

字典在这里更合适,使用
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})

使用字典要比使用列表简单得多

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

使用字典要比使用列表简单得多

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

c=Counter(text.splitlines())
c=Counter(text.splitlines())
我正在检查的数字格式如下:116 104 105 115 115 32 109 97 101 115 32 105 116 32 111 102 105 99 105 97 108 44 32 119 104 105 99 104 32 105 32 115 32 111 103 101 97 116 46 32 10这是一行。。根据微控制器输出到日志文件的内容,行的长度不同。我正在检查的数字格式如下:116 104 105 115 32 109 97 107 101 115 32 105 116 32 111 102 105 99 105 97 108 44 32 119 104 105 99 104 32 105 32 115 32 111 32 103 101 97 116 46 32 10这是一行。。根据微控制器输出到日志文件的内容,行的长度会有所不同。我正在执行此建议,就像我使用text.split()拆分字符串以获取数字字符串中的单个“字”时一样,它们是字符串而不是整数。但在最初的测试中,这似乎是迄今为止最好的解决方案。非常感谢您的帮助。我正在使这个建议起作用,就像我使用text.split()拆分字符串以获得数字字符串中的单个“单词”时一样,它们是字符串而不是整数。但在最初的测试中,这似乎是迄今为止最好的解决方案。非常感谢你的帮助。