2014-01-21 46 views
2

有沒有辦法使用地圖功能將諸如".2f" % (num)之類的東西映射到數字列表?將地圖字符串格式化爲數字列表

通常打印號碼清單,我會做類似如下:

>>> a = [1.003,2.004,3.005] 
>>> print " ".join(map(str, a)) 
1.003 2.004 3.005 

但是我會到位下劃線來獲得低於所需的輸出?

>>> print " ".join(map(____, a)) 
1.00 2.00 3.01 

編輯

爲了澄清,四捨五入並不重要。 3.00也適用。

+1

使用''%.2f''你不能得到'3.01'爲'3.005'。 –

回答

5
a = [1.003,2.004,3.005] 
print " ".join(map("{:.2f}".format, a)) 

輸出

1.00 2.00 3.00 

注: Python中,默認情況下,舍3.0053.00

1

對於格式列表中所述,使用列表理解

>>> print " ".join("%.2f" % n for n in a) 

或者,如果你真的想使用地圖:

>>> print " ".join(map((lambda n: "%.2f" % n), a)) 

如前所述,雖然也有一些特殊性與四捨五入浮動。有關更多信息,請參見herehere

如果你真的想準確四捨五入,你可以用decimal.Decimal達致這,例如:

>>> import decimal 
>>> a = ['1.003', '2.004', '3.005'] 
>>> ctx = decimal.Context(prec=3, rounding=decimal.ROUND_HALF_UP) 
>>> print " ".join(str(ctx.create_decimal(n)) for n in a) 
['1.00', '2.00', '3.01'] 

然而,這意味着用字符串,而不是浮動作爲輸入工作。

+0

我想第二個,但它給了異常'TypeError:並非所有參數在字符串格式轉換' –

+0

@thefourtheye我認爲這個問題是關於如何連接格式化的字符串,而不是浮點計算的奇怪 – aquavitae

+0

@GrijeshChauhan對不起,錯字 - 我錯過了一些括號。答案已更新。 – aquavitae

1

您可以使用列表理解來生成字符串,並打印出來,但阿什維尼·喬杜裏在評論中說,你不能使用3.005字符串格式得到3.01「.2f」

a = [1.003,2.004,3.005] 
b = ' '.join(['{:.2f}'.format(num) for num in a]) 
print(b) # 1.00 2.00 3.00 
+0

這就是我會這樣做的。 –

1

這裏有很多很好的解決方案。但他們似乎不符合您的預期產出。這是因爲循環功能處理浮動(閱讀Note in the docs)。該解決方案是使用小數進行準確的四捨五入:

from decimal import * 
" ".join(map(lambda x: str(Decimal(str(x)).quantize(Decimal('.01'), rounding=ROUND_HALF_UP)), a)) 
# '1.00 2.00 3.01' 
相關問題