四舍五入列表中的数字



我正在尝试将列表中的所有数字四舍五入到小数点后两位,如下所示:

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]

外部列表理解在外部列表对象上循环,然后对每个子列表应用内部列表理解。这个嵌套理解是你用来生成一个新的子列表的东西,所以你把它放在左边。

您的标记表明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)就地舍入阵列,而无需创建副本。

您只需在列表上调用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]]

最新更新