舍入列表中的数字

时间:2014-09-12 14:23:14

标签: python list numbers list-comprehension

我试图将所有数字四舍五入到列表列表中的两位小数:

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相同的东西。这是最好的方式吗?有更好的替代方式吗?谢谢!

3 个答案:

答案 0 :(得分:2)

你需要嵌套你的列表理解:

[[np.round(float(i), 2) for i in nested] for nested in outerlist]

外部列表解析遍历外部列表对象,然后为每个子列表应用内部列表解析。这种嵌套理解是您应用于生成新子列表的内容,因此您将其放在左侧。

答案 1 :(得分:1)

你的标签建议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)将数组四舍五入,而无需创建副本。

答案 2 :(得分:1)

您可以在列表列表中调用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]]