3 回答
TA贡献1785条经验 获得超8个赞
这是一个老问题,但是我要添加一些可能有用的东西:
我知道您是在原始Python列表中编写示例的,但是如果您决定使用numpy数组代替(这在您的示例中是完全合法的,因为您似乎正在处理数字数组),那么(几乎完全是)此命令可以说你编造了:
import numpy as np
np.set_printoptions(precision=2)
如果您仍然想查看真正精确数字的所有小数,但要摆脱尾随零的情况,就更好了,例如,使用格式化字符串%g:
np.set_printoptions(formatter={"float_kind": lambda x: "%g" % x})
对于仅打印一次且不更改全局行为的情况,请使用np.array2string与上述相同的参数。
TA贡献1827条经验 获得超8个赞
正如没有人添加的那样,应该注意的是,从Python 2.6+开始,推荐的字符串格式化方法是使用format,以便为Python 3+做好准备。
print ["{0:0.2f}".format(i) for i in a]
新的 字符串格式语法不难使用,但功能非常强大。
我虽然pprint可能有一些东西,但是我什么也没发现。
TA贡献1802条经验 获得超6个赞
一个更永久的解决方案是子类化float:
>>> class prettyfloat(float):
def __repr__(self):
return "%0.2f" % self
>>> x
[1.290192, 3.0002, 22.119199999999999, 3.4110999999999998]
>>> x = map(prettyfloat, x)
>>> x
[1.29, 3.00, 22.12, 3.41]
>>> y = x[2]
>>> y
22.12
子类化的问题float在于,它会破坏明确寻找变量类型的代码。但是据我所知,这是唯一的问题。一个简单的x = map(float, x)撤消转换为prettyfloat。
可悲的是,您不能仅仅float.__repr__因为monkey-patch而已,因为它float是不可变的。
如果您不想继承子类float,但又不介意定义一个函数,map(f, x)则比起简单得多[f(n) for n in x]
添加回答
举报