为什么我不能对通过拆分用户输入创建的列表使用 `sum` 函数?

8

我正在做作业,需要使用sum()和len()函数来计算输入数字列表的平均值,但当我尝试使用sum()函数来获取列表的总和时,出现了错误TypeError: unsupported operand type(s) for +: 'int' and 'str'。以下是我的代码:

numlist = input("Enter a list of number separated by commas: ")

numlist = numlist.split(",")

s = sum(numlist)
l = len(numlist)
m = float(s/l)
print("mean:",m)
7个回答

13

问题在于当你从输入中读取时,你得到的是一个字符串列表。你可以将以下代码作为第二行来解决这个问题:

numlist = [float(x) for x in numlist]

10

问题在于你有一个字符串列表,你需要在计算总和之前将它们转换为整数。例如:

numlist = numlist.split(",")
numlist = map(int, numlist)
s = sum(numlist)
...

4

您正在拼接字符串,而不是数字,这就是您的错误信息所说的。

将每个字符串转换为其相应的整数:

numlist = map(int, numlist)

然后取平均值(注意我使用的float()与您不同):

arithmetic_mean = float(sum(numlist)) / len(numlist)

在除法之前应该使用float(),因为float(1/2) = float(0) = 0.0,这不是你想要的。

另一个选择是一开始就将它们全部变成float

numlist = map(float, numlist)

除非 OP 使用的是 Py3,否则默认情况下为整数除法。 - lvc
嗯,那也有可能。 - Blender

0

Split函数返回一个字符串数组,因此在使用sum函数之前,您需要将这些字符串转换为整数。


0
你可以试试这个。
reduce(lambda x,y:x+y, [float(x) for x in distance])

0
将字符串输入转换为浮点数值列表。以下是更新后的代码。
numlist = list(map(int,input("Enter a list of number separated by commas: ").split(',')))
l = len(numlist)
s = sum(numlist)
print("mean :",s/l)

0

针对Python 2.7版本

numlist = map(int,raw_input().split(","))
s = sum(numlist)
l = len(numlist)
m = float(s/l)
print("mean:"+ str(m))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接