在python中查找列表的平均值

时间:2017-10-02 20:09:35

标签: python list average

在对网站上已有的其他问题进行一些研究之后,我的程序仍在回击错误。我想找到我的列表的平均值,它是从文本文件中获取的。 文本文件的布局如下:

0
dyl
1
john
2
ryan
3
Chelsey
4
bob
5
dan

这是我的代码:

a = open("stats.txt","r")

b = a.read().splitlines()

newvar = []

newvar.extend(b[0::2])

avg = sum(newvar)/len(newvar)

print(avg)

我得到的结果是:TypeError:+:' int'不支持的操作数类型和' str'

1 个答案:

答案 0 :(得分:1)

问题&溶液

您的代码的主要问题是,在读取文件并解析输出后,newvar是一个字符串列表:

['0', '1', '2', '3', '4', '5']

由于sum不会处理字符串 - 即使它可以,您也无法获得所需的输出 - 您需要将字符串转换为整数。这可以使用简单的列表理解来完成:

newvar = [int(s) for s in newvar]

然后您可以照常使用sum

sum(newvar) / len(newvar)

哪个有输出:

2

改进

以下是对原始代码的一些常规改进:

  • 使用上下文管理器语句with打开文件。这样,您可以确保您的文件始终处于关闭状态。

  • 您可以使用'过滤器'而不是使用切片来过滤掉字母数字行。在上面的列表理解中跳过它们。

以下是修改后的代码:

with open('stats.txt', 'r') as file:
    nums = [int(n) for n in file.read().splitlines() if n.isdigit()] 
avg = sum(nums) / len(nums)
print(avg)