for match in matches:
p = float(match.split()[0])
print(p)
上面的代码给出以下结果:
2.14
6.06
6.89
但是,如果我尝试对这些数字求和
print(sum(p))
我收到一个错误的“ float”对象不可迭代
答案 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