我试图将所有数字四舍五入到列表列表中的两位小数:
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相同的东西。这是最好的方式吗?有更好的替代方式吗?谢谢!
答案 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]]