我必须编写一个程序,从文件中读取数字列表,然后输出平均值。如果我的文件包含 3 45 83 21 我的程序将输出: 38 我知道如何创建文件:
myFile = open('average', 'wt')
myFile.write('3\n')
myFile.write('45\n')
myFile.write('83\n')
myFile.write('21\n')
myFile.close()
这一点有效,但我不知道如何做第二部分。
with open('average', 'wt') as myFile:
myFile.write('3\n')
myFile.write('45\n')
myFile.write('83\n')
myFile.write('21\n')
使用 拆分数字字符串str.split
,然后转换为 int。将所有数字相加,除以:
with open('average', 'rt') as myFile:
numbers = map(int, myFile.read().split())
print(sum(numbers, 0.0) / len(numbers))
如果文件很大,上面会导致问题(占用太多内存)。在这种情况下,请使用以下(逐行处理):
with open('average', 'rt') as myFile:
total, n = 0, 0
for line in myFile:
total += int(line)
n += 1
print(float(total) / n)
这段代码应该做你想做的事。
numbers = [int(f.strip()) for f in open("average").readlines()]
print(sum(numbers)/float(len(numbers)))
它使用列表推导来构建文件中所有数字的列表,它用于从strip()
行中删除换行符\n
,然后int()
将数字转换为整数(此时,数字仍然是一个字符串)。读取文件本身,使用readlines()
它输出文件中所有行的列表。
最后,它打印列表中所有数字的总和除以列表的长度(给出所有数字的平均值)。