我想所有的數字四捨五入至小數點後兩位在下面列出的清單列表:四捨五入號碼列表
a = [[4.5555, 5.6666, 8.3365], [10.4345, 1.574355. 0.7216313]]
b = [x for x in a for y in [round(z, 2) for z in x]]
我試圖用一個列表理解來做到這一點,但無法實現。 b變量只返回與a相同的東西。這是最好的辦法嗎?有更好的替代方法嗎?謝謝!
我想所有的數字四捨五入至小數點後兩位在下面列出的清單列表:四捨五入號碼列表
a = [[4.5555, 5.6666, 8.3365], [10.4345, 1.574355. 0.7216313]]
b = [x for x in a for y in [round(z, 2) for z in x]]
我試圖用一個列表理解來做到這一點,但無法實現。 b變量只返回與a相同的東西。這是最好的辦法嗎?有更好的替代方法嗎?謝謝!
您需要巢您的列表理解:
[[np.round(float(i), 2) for i in nested] for nested in outerlist]
外部列表理解循環在你的外列表對象,然後應用內部列表理解每個子列表。這種嵌套理解適用於生成新的子列表,因此您將其放在左側。
好吧,我只是顛倒嵌套列表理解...現在作品謝謝! – KidSudi 2014-09-12 14:31:42
你的標籤suggset a
實際上是一個Numpy數組,而不是一個嵌套的Python列表。在這種情況下,你可以使用數組對象的round()
方法來獲取數組的圓形副本:
>>> a = numpy.random.randn(3, 3)
>>> a
array([[ 1.46998835, 0.62139675, 0.37665545],
[-0.79925019, -0.51251798, 1.36500036],
[ 0.66339687, -1.22586919, 1.68054346]])
>>> a.round(3)
array([[ 1.47 , 0.621, 0.377],
[-0.799, -0.513, 1.365],
[ 0.663, -1.226, 1.681]])
你能讓到位陣列,而不創建副本,使用a.round(3, out=a)
。
刪除了numpy標籤 – KidSudi 2014-09-12 14:34:22
@KidSudi:如果你想執行這樣的操作,你應該使用Numpy,因爲它會容易得多。 (你的代碼示例仍然使用'np.round()'。) – 2014-09-12 14:35:14
我的數據實際上是從數據框中收集的。我想用matplotlib繪製數據框的表格,但是從我收集的內容來看,您無法創建表格數字。因此,我將數據幀中的數據導出到列表列表中(即每個列表都是數據幀中的一行)。然後,我只在一個情節圖中繪製了這張表。不知道是否有更好的方式去做這件事...... – KidSudi 2014-09-12 14:40:35
你可以叫你np.round名單列表上,不需要修真
import numpy as np
a = ([[4.5555, 5.6666, 8.3365], [10.4345, 1.574355, 0.7216313]])
print np.round(a,2)
[[ 4.56 5.67 8.34]
[ 10.43 1.57 0.72]]
請你告訴我們你的列表中理解的嘗試。 – 2014-09-12 14:23:47
不要嘗試對數字進行舍入,因爲您始終有一些浮點錯誤。當你打印出來時,只需圍繞它們。無論何時進行計算,您都應該使用您擁有的最大數字位數進行計算。 – Ffisegydd 2014-09-12 14:23:53
考慮numpy:'np.round()'將在多維數據上工作沒有問題。 – mdurant 2014-09-12 14:31:44