在python中轻松漂亮地打印浮点数?

我有一个花车清单。如果我只是简单地print将其显示为:


[9.0, 0.052999999999999999, 0.032575399999999997, 0.010892799999999999, 0.055702500000000002, 0.079330300000000006]

我可以使用print "%.2f",这将需要for循环遍历列表,但是对于更复杂的数据结构,它将不起作用。我想要类似的东西(我正在完全弥补)


>>> import print_options

>>> print_options.set_float_precision(2)

>>> print [9.0, 0.052999999999999999, 0.032575399999999997, 0.010892799999999999, 0.055702500000000002, 0.079330300000000006]

[9.0, 0.05, 0.03, 0.01, 0.06, 0.08]


四季花海
浏览 1066回答 3
3回答

慕的地10843

这是一个老问题,但是我要添加一些可能有用的东西:我知道您是在原始Python列表中编写示例的,但是如果您决定使用numpy数组代替(这在您的示例中是完全合法的,因为您似乎正在处理数字数组),那么(几乎完全是)此命令可以说你编造了:import numpy as npnp.set_printoptions(precision=2)如果您仍然想查看真正精确数字的所有小数,但要摆脱尾随零的情况,就更好了,例如,使用格式化字符串%g:np.set_printoptions(formatter={"float_kind": lambda x: "%g" % x})对于仅打印一次且不更改全局行为的情况,请使用np.array2string与上述相同的参数。

慕仙森

正如没有人添加的那样,应该注意的是,从Python 2.6+开始,推荐的字符串格式化方法是使用format,以便为Python 3+做好准备。print ["{0:0.2f}".format(i) for i in a]新的 字符串格式语法不难使用,但功能非常强大。我虽然pprint可能有一些东西,但是我什么也没发现。

呼啦一阵风

一个更永久的解决方案是子类化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]>>> y22.12子类化的问题float在于,它会破坏明确寻找变量类型的代码。但是据我所知,这是唯一的问题。一个简单的x = map(float, x)撤消转换为prettyfloat。可悲的是,您不能仅仅float.__repr__因为monkey-patch而已,因为它float是不可变的。如果您不想继承子类float,但又不介意定义一个函数,map(f, x)则比起简单得多[f(n) for n in x]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python