2014-02-06 47 views
-1

我的代碼:我如何在列表中求和值?

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文件並將其附加到距離列表。我如何總結他們,這樣我可以得到一個總距離?我已經嘗試了一些在網站上給出的答案,但他們都沒有奏效:(

回答

4

轉換每個元素的浮動,並使用內置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'] 

distance = [float(s) for s in distance] 
total = sum(distance) 

total 
>>> 2.9199999999999986 

採取額外787-9的護理使用十進制。

from decimal import Decimal 

distance = [Decimal(s) for s in distance] 
total = sum(distance) 
total 
>>>Decimal('2.92') 
5

轉換的字符串中使用map到彩車,然後用sum總結得到的數字。

>>> sum(map(float, distance)) 
2.9199999999999986 

這9個是由於浮動的固有不精確性。如果你想要確切的東西,你可以使用Decimal

>>> from decimal import Decimal 
>>> sum(map(Decimal, distance)) 
Decimal('2.92') 
+0

發電機表達可能被認爲是更Python :'sum(float(x)for x in distance)'。 – chepner

+1

@chepner:爲什麼?你會用發電機來代替所有'map'的使用嗎? (itertools.imap也會返回一個生成器,因此也不會再創建list'map') – njzk2

+1

您可以使用'math.fsum'而不是'sum'來獲得更準確的結果。 –

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 

爲此你需要移交清單,sum之前逐步執行列表distance的每一個值,並轉換爲浮動。

您可以使用列表理解,地圖,一個循環或發電機的表達:

>>> 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  
+0

技術上來說,這是一個生成器表達式,因爲沒有創建列表,就像'sum([float(e)for e in distance])'一樣。 – chepner

相關問題