对列表中的十进制数求和。python

对列表中的十进制数求和。python,python,sum,Python,Sum,我正在试图打印训练结果,但是,测试的准确性无法计算 q=(['0.50000', '0.56250', '0.50000', '0.50000']) sum(q) TypeError: unsupported operand type(s) for +: 'int' and 'str' 您有一个str列表,因此首先必须将它们转换为float,这可以使用sum中的生成器表达式来实现 sum函数使用起始值0 因此,使用字符串对象添加int对象将引发TypeError 为了解决此问题,您可以先将字

我正在试图打印训练结果,但是,测试的准确性无法计算

q=(['0.50000', '0.56250', '0.50000', '0.50000'])

sum(q)
TypeError: unsupported operand type(s) for +: 'int' and 'str'
您有一个str列表,因此首先必须将它们转换为float,这可以使用sum中的生成器表达式来实现

sum函数使用起始值0

因此,使用字符串对象添加int对象将引发TypeError


为了解决此问题,您可以先将字符串对象转换为浮点对象,然后应用求和函数。

您可以这样做:

q=(['0.50000', '0.56250', '0.50000', '0.50000'])
result = 0 # create a variable wich will store the value.

for i in q: # loop over your elements
    result += float(i) # cast your temp variable (i) to float and add each element to result. 
print(result) # escape the loop and print the result variable.


有人应该发布imho的正确版本,请参见以下评论:

>>> sum(map(float, q))
2.0625

请记住,浮点容易出现舍入错误,据我所知,您可以通过以下方法获得一点额外的精度:

from decimal import Decimal
my_sum = sum(map(Decimal, q))

从numberseither和字符串sumq中删除“”,或将数值sumfloatv和中的v相加q@JanStránskýsumq真的为你工作吗?@superbrain你又找到我了。我使用sum和一些向量实例作为sumvectors,zeroVector,期望所有能够求和的向量都有相同的行为..声明map是生成器表达式的正确版本介于脆弱和完全错误之间@CoryKramer嗯,重新实现内置不是一件正确的事情。我不确定关于另一个案例的非常古老的答案,而且相当同意我应该告诉我什么?@CoryKramer你能告诉我这个答案应该告诉我什么,以及我是如何介于脆弱和完全错误之间的吗?我想这首先取决于为什么你的版本是正确的。如果它与性能有关,则map和generator表达式在速度上基本相同,具体取决于用例。如果涉及样式,大多数Python开发人员认为生成器表达式更为python。归根结底,这真的不重要,取决于每个开发人员,他们更喜欢哪一个。因为这确实是一种偏好,所以两种解决方案都不比另一种更合适。@CoryKramer如我所说,我认为重新实现Python已经提供的内置解决方案是不合适的。我不认为速度基本上是相等的。我在从0到1000000个元素的列表上测试了我们的解决方案,我的解决方案的速度始终比原来快1.23倍。我在哪里可以找到有关Python开发人员认为生成器表达式解决方案更具Python的统计数据?解释问题究竟是什么问题,以及你的答案如何解决问题将是很重要的。
q=(['0.50000', '0.56250', '0.50000', '0.50000'])
result = 0 # create a variable wich will store the value.

for i in q: # loop over your elements
    result += float(i) # cast your temp variable (i) to float and add each element to result. 
print(result) # escape the loop and print the result variable.
q=([0.50000, 0.56250, 0.50000, 0.50000])
sum(q)
q=(['0.50000', '0.56250', '0.50000', '0.50000'])
sum([float(x) for x in q])
>>> sum(map(float, q))
2.0625
from decimal import Decimal
my_sum = sum(map(Decimal, q))