float的总和-'float'对象不可迭代

时间:2018-10-19 16:52:30

标签: python python-2.7

for match in matches:
    p = float(match.split()[0])
    print(p)

上面的代码给出以下结果:

2.14
6.06
6.89

但是,如果我尝试对这些数字求和

print(sum(p))

我收到一个错误的“ float”对象不可迭代

6 个答案:

答案 0 :(得分:2)

'p'是单个浮点数,sum()适用于数字列表。这应该起作用:

numbers = [float(match.split()[0]) for match in matches]
sum(numbers)

答案 1 :(得分:1)

您基本上是在尝试取p的总和,这是float的错误。如果需要所有浮点数的总和,则应将它们存储在结构中,然后求和:

myFloats = [float(m.split()[0]) for m in matches]
print(myFloats)
print(sum(myFloats))

我在这里使用列表推导将所有浮点数存储在列表中,但它与for循环的作用相同。如果您希望使用for循环,则可以改用myFloats.append。另外,如果您只想汇总数据而不关心其他存储,则可以像这样使用map

print(sum(map(lambda x: float(x.split()[0]), matches)))

顺便说一句,将来为自己解决类似错误的一种好方法是使用type方法。这将告诉您变量的类型是什么。例如,print(type(p))将返回“ float”,这将告诉您您不是在使用迭代器。

答案 2 :(得分:0)

您的变量p只是一个浮点对象。它不是浮点对象的列表。请尝试

p=[]
for match in matches:
    p.append(float(match.split()[0]))
    print(p)
print(sum(p))

答案 3 :(得分:0)

您代码中的

p是指单个float,而不是列表。试试这个:

p_list = []
for match in matches:
    p = float(match.split()[0])
    print(p)
    p_list.append(p)
print("Sum is {0:.2f}".format(sum(p_list)))

在这里,您将各个p的值累加到名为p_list的列表中,然后对其求和并打印结果。 ("{0:.2f}"是一种格式说明符,用于打印float并保留两位小数。)

答案 4 :(得分:0)

将p的值存储在列表或数组中,然后执行sum

plist = []
for match in matches:
    p = float(match.split()[0])
    plist.append(p)

sum(plist)

答案 5 :(得分:0)

或者在新变量中添加简单的商店,而无需创建新的庞大列表

float_sum=0
for match in matches:
    p = float(match.split()[0])
    print(p)
    float_sum+=p