我正在尝试将列表中的所有数字四舍五入到小数点后两位,如下所示:
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]]