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