我的代码:
distance = ['0.12', '0.02', '0.13', '0.02', '0.13', '0.02', '0.13', '0.02', '0.12', '0.01', '0.13', '0.02', '0.12', '0.02', '0.12', '0.02', '0.13', '0.02', '0.13', '0.02', '0.12', '0.02', '0.13', '0.02', '0.13', '0.02', '0.13', '0.02', '0.13', '0.02', '0.13', '0.02', '0.13', '0.02', '0.13', '0.01', '0.13', '0.02', '0.13', '0.01']
值来自CSV文件并将其附加到距离列表。如何将它们相加以便我可以获得总距离?我已经尝试了网站上给出的一些答案,但它们没有奏效:(
答案 0 :(得分:5)
使用map
将字符串转换为浮点数,然后将结果数字与sum
相加。
>>> sum(map(float, distance))
2.9199999999999986
这些9是由于浮子固有的不精确。如果您想要精确的内容,可以使用Decimal
。
>>> from decimal import Decimal
>>> sum(map(Decimal, distance))
Decimal('2.92')
答案 1 :(得分:4)
将每个元素转换为float并使用sum
builtin:
distance = ['0.12', '0.02', '0.13', '0.02', '0.13', '0.02', '0.13', '0.02', '0.12', '0.01', '0.13', '0.02', '0.12', '0.02', '0.12', '0.02', '0.13', '0.02', '0.13', '0.02', '0.12', '0.02', '0.13', '0.02', '0.13', '0.02', '0.13', '0.02', '0.13', '0.02', '0.13', '0.02', '0.13', '0.02', '0.13', '0.01', '0.13', '0.02', '0.13', '0.01']
distance = [float(s) for s in distance]
total = sum(distance)
total
>>> 2.9199999999999986
要照顾额外的9,请使用十进制。
from decimal import Decimal
distance = [Decimal(s) for s in distance]
total = sum(distance)
total
>>>Decimal('2.92')
答案 2 :(得分:3)
在使用内置sum
之前,您需要将字符串值转换为浮点数。
这不起作用:
>>> sum(['1', '2'])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'
但这样做:
>>> sum([1,2])
3
因此,您需要逐步浏览列表distance
的每个值,并在将列表移至sum
之前转换为浮点数。
您可以使用列表推导,映射,循环或生成器表达式:
>>> distance = ['0.12', '0.02', '0.13', '0.02', '0.13', '0.02', '0.13', '0.02', '0.12', '0.01', '0.13', '0.02', '0.12', '0.02', '0.12', '0.02', '0.13', '0.02', '0.13', '0.02', '0.12', '0.02', '0.13', '0.02', '0.13', '0.02', '0.13', '0.02', '0.13', '0.02', '0.13', '0.02', '0.13', '0.02', '0.13', '0.01', '0.13', '0.02', '0.13', '0.01']
>>> sum(float(e) for e in distance)
2.9199999999999986
要获得更准确的结果,请使用fsum:
>>> math.fsum(float(e) for e in distance)
2.92