从文本文件中获取平均值

时间:2015-05-20 16:09:58

标签: python

我在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

如何从列表中获得平均值???

6 个答案:

答案 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,则明确需要将intmap()中的任何一个转换为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]:之后的最后一列读入浮点列表。最后,平均值是所有数字除以计数的总和,即列表的长度。