我在txt文件中有分数并已将名称,分数导入空白列表。我需要知道如何从列表中获取txt文件的平均分数。
码
column = []
for line in open('name,score.txt','r').readlines():
column.append(line.strip(':'))
文本文件数据
pon : 9
jon : 3
bob: 10
zack : 4
cam : 5
tim : 3
如何从列表中获得平均值???
答案 0 :(得分:2)
需要一些修复
column = []
for line in open('test.txt','r').readlines():
column.append(line.strip().split(':')[1]) # Strip the new lines
# Split on the :
# Append the second value
column = map(int,column) # Convert everything to int
avg = sum(column)/len(column) # Find the average using sum
print (avg) # Finally print it
请注意,Kasra的答案是更加诡计多端的方式。我刚刚纠正了你的代码。
答案 1 :(得分:1)
根据文本文件的格式,在分割:
上的每一行后,您将获得一个包含两个值的列表,首先是名称,然后是第二个标记,因此您需要使用{{1}完成文件的迭代后,在line.split(':')[1]
列表中有一些字符串,对列表内容执行任何算术运算,将列表中的所有元素转换为{{1}这是通过使用column
函数完成的。
此外,如果您使用的是Python 2.x,则明确需要将int
或map()
中的任何一个转换为float,否则平均值将始终返回为sum(list)
。
len(list)
答案 2 :(得分:0)
获取所有数字(不要忘记将它们转换为整数)并执行此操作
x=sum(list_of_numbers)
此处x
包含总和。然后将总和除以此列表的长度。
for line in open('name,score.txt','r').readlines():
column.append(int(line.split(':')[1]))
print sum(column) / len(column)
答案 3 :(得分:0)
您也不需要使用readlines
作为处理可以使用with
statement的文件的更加pythonic方式,然后在sum
函数中使用生成器表达式:
with open('name,score.txt','r') as f :
s=sum(int(line.split(':')[-1]) for line in f)
l=sum(1 for _ in f)
avg=s/l
答案 4 :(得分:0)
你们过于复杂了。只需使用isdigit()
list_ = [float(x) for x in open(FILE).read().split() if x.isdigit()]
m = 1. *sum(list_) / len(list_)
答案 5 :(得分:0)
使用float
转换字符串以避免Python 2中的整数分歧:
with open('name,score.txt','r') as f :
data = [float(line.split(':')[-1]) for line in f]
avg = sum(data) / len(data)
with
上下文管理器保证文件将被关闭。
列表推导[float(line.split(':')[-1]) for line in f]
将:
之后的最后一列读入浮点列表。最后,平均值是所有数字除以计数的总和,即列表的长度。