递增列表值Python 3

递增列表值Python 3,python,Python,上面代码的目的是打开number.txt,它有100个数字,都在范围(1101)内,所有数字的末尾都有“\n”字符,并计算遇到每个数字的次数 首先找到文件中的最大数,然后创建一个元素数等于文件中最大数的列表,所有元素最初都设置为零。然后检查数字。文件中的所有数字都是整数 如果文件中包含的最大数量为100,则hist[]列表最初包含100个元素,这些元素都是0 在检查过程中,如果遇到数字78,则索引为[77]即hist[77]的元素将从值0更新为1。如果再次遇到78,则hist[77]将从1更改为

上面代码的目的是打开number.txt,它有100个数字,都在范围(1101)内,所有数字的末尾都有“\n”字符,并计算遇到每个数字的次数

首先找到文件中的最大数,然后创建一个元素数等于文件中最大数的列表,所有元素最初都设置为零。然后检查数字。文件中的所有数字都是整数

如果文件中包含的最大数量为100,则hist[]列表最初包含100个元素,这些元素都是0

在检查过程中,如果遇到数字78,则索引为[77]即hist[77]的元素将从值0更新为1。如果再次遇到78,则hist[77]将从1更改为2

这样,无论文件中出现什么数字,每个出现的数字都有一个计数器(也有没有出现但小于最大出现数字的数字。有计数器,但这不是问题)

检查是否打开了正确的文件后,hist列表最初设置正确,问题是遇到相应的数字时,hist[]列表的值没有得到增量。当我在最后打印列表时,所有值仍然为零


我正在使用Python 3.4.3。脚本和'numbers.txt'都在我的桌面上。感谢您的帮助。

您在文件上循环了两次,但没有将文件读取指针倒回起始位置。在第二个循环之前添加一个
file.seek()
调用:

infile = open('numbers.txt','r')

c = 0
for i in infile:
    if int(i) > c:
        c = int(i)
hist = [0]*c

for i in infile:   #checking
    ii = int (i)-1
    hist[ii] += 1  # problem area seemingly

for i in range(c):
    print(str(i+1),':',end=' ')
    print(str(hist[i]))
如果没有
seek
迭代,
infle
将不会产生任何进一步的行;您已到达文件的结尾

不过,您最好在此处使用:

infile.seek(0)
for i in infile:   #checking
然后,您可以使用
max(hist)
获取计数最高的数字,或者使用
计数器以最常见到最不常见的顺序检索数字。最常见()方法
方法:

from collections import Counter

with open('numbers.txt','r') as infile:
    hist = Counter(int(line) for line in infile)

非常感谢你。我错误地认为只有read()、readline()这样的方法才能提升文件指针,而不是infle中基于语法的语句:我是python新手,所以。。无论如何,再次谢谢你。
# In numerical order, setting missing numbers to 0
for i in range(1, max(hist) + 1):
    print('{}: {}'.format(i, hist.get(i, 0)))

# In most common to least order
# In numerical order
for number, count in hist.most_common():
    print('{}: {}'.format(number, count))