在python彩车相当方便打印?(Easy pretty printing of floats in

2019-07-28 18:10发布

我有花车的列表。 如果我只是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]

Answer 1:

这是一个老问题,但我想补充可能有用的东西:

我知道你在生Python列表写你的榜样,但如果你决定使用numpy阵列,而不是(这将是你的榜样完全合法的,因为你似乎是处理数字数组),有(几乎完全)这个命令你说你做了:

import numpy as np
np.set_printoptions(precision=2)

甚至更好,你的情况,如果你还是想看到真正准确的数字的所有小数,但甩掉尾随例如零,用格式化字符串%g

np.set_printoptions(formatter={"float_kind": lambda x: "%g" % x})

对于刚刚打印一次,而不是不断变化的全球行为,使用np.array2string与上述相同的论点。



Answer 2:

由于没有人增加了它,它应该指出的是,在Python前进2.6+推荐的方法做字符串格式化与format ,来准备的Python 3+。

print ["{0:0.2f}".format(i) for i in a]

新的 字符串格式化的语法并不难用,但仍然是相当强大的。

我虽然可以pprint可能有一些东西,但我没有发现任何东西。



Answer 3:

一个更永久的解决办法是子类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__ ,因为float的不可变的。

如果你不想继承float ,但不介意定义一个函数, map(f, x)是很多比更简洁[f(n) for n in x]



Answer 4:

你可以做:

a = [9.0, 0.052999999999999999, 0.032575399999999997, 0.010892799999999999, 0.055702500000000002, 0.079330300000000006]
print ["%0.2f" % i for i in a]


Answer 5:

请注意,您也可以像乘“%.2f”(例如:“%.2f” * 10)的字符串。

>>> print "%.2f "*len(yourlist) % tuple(yourlist)
2.00 33.00 4.42 0.31 


Answer 6:

print "[%s]"%", ".join(map(str,yourlist))

这将避免舍入误差的二进制表示当印刷,而不会引入一个固定的精度的约束(如用在格式化"%.2f" ):

[9.0, 0.053, 0.0325754, 0.0108928, 0.0557025, 0.0793303]


Answer 7:

最容易的选择应该是使用四舍五入例行:

import numpy as np
x=[9.0, 0.052999999999999999, 0.032575399999999997, 0.010892799999999999, 0.055702500000000002, 0.079330300000000006]

print('standard:')
print(x)
print("\nhuman readable:")
print(np.around(x,decimals=2))

这将产生输出:

standard:
[9.0, 0.053, 0.0325754, 0.0108928, 0.0557025, 0.0793303]

human readable:
[ 9.    0.05  0.03  0.01  0.06  0.08]


Answer 8:

我认为,Python 3.1中,将打印它们更好默认情况下,没有任何代码改变。 但是,这是无用的,如果你使用的是尚未更新使用Python 3.1工作的任何扩展



Answer 9:

清单谱曲是你的朋友。

print ", ".join("%.2f" % f for f in list_o_numbers)

试试吧:

>>> nums = [9.0, 0.052999999999999999, 0.032575399999999997, 0.010892799999999999]
>>> print ", ".join("%.2f" % f for f in nums)
9.00, 0.05, 0.03, 0.01


Answer 10:

你可以使用大熊猫。

下面是一个列表的示例:

In: import pandas as P
In: P.set_option('display.precision',3)
In: L = [3.4534534, 2.1232131, 6.231212, 6.3423423, 9.342342423]
In: P.Series(data=L)
Out: 
0    3.45
1    2.12
2    6.23
3    6.34
4    9.34
dtype: float64

如果你有一个字典d,并希望其键作为行:

In: d
Out: {1: 0.453523, 2: 2.35423234234, 3: 3.423432432, 4: 4.132312312}

In: P.DataFrame(index=d.keys(), data=d.values())
Out:  
    0
1   0.45
2   2.35
3   3.42
4   4.13

并给予字典的数据帧的另一种方式:

P.DataFrame.from_dict(d, orient='index')


Answer 11:

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

Python的2:

print ', '.join('{:0.2f}'.format(i) for i in l)

Python 3中:

print(', '.join('{:0.2f}'.format(i) for i in l))

输出:

9.00, 0.05, 0.03, 0.01, 0.06, 0.08


Answer 12:

First, elements inside a collection print their repr. you should learn about __repr__ and __str__.

This is the difference between print repr(1.1) and print 1.1. Let's join all those strings instead of the representations:

numbers = [9.0, 0.053, 0.0325754, 0.0108928, 0.0557025, 0.07933]
print "repr:", " ".join(repr(n) for n in numbers)
print "str:", " ".join(str(n) for n in numbers)


Answer 13:

我只是碰到了这个问题,而试图用pprint输出浮动的元组的列表。 嵌套的内涵可能是一个坏主意,但这里是我所做的:

tups = [
        (12.0, 9.75, 23.54),
        (12.5, 2.6, 13.85),
        (14.77, 3.56, 23.23),
        (12.0, 5.5, 23.5)
       ]
pprint([['{0:0.02f}'.format(num) for num in tup] for tup in tups])

我用生成器表达式在第一,但pprint只是repred发电机...



Answer 14:

我有这个问题,但没有解决方案的这里没有我想要的到底是什么(我想打印的输出是一个有效的Python表达式),那么这个怎么样:

prettylist = lambda l : '[%s]' % ', '.join("%.2f" % f for f in l)

用法:

>>> ugly = [9.0, 0.052999999999999999, 0.032575399999999997,
            0.010892799999999999, 0.055702500000000002, 0.079330300000000006]
>>> prettylist = lambda l : '[%s]' % ', '.join("%.2f" % f for f in l)
>>> print prettylist(ugly)
[9.00, 0.05, 0.03, 0.01, 0.06, 0.08]

(我知道.format()应该是更标准的解决方案,但我觉得这更易读)



Answer 15:

下面的代码工作对我很好。

list = map (lambda x: float('%0.2f' % x), list)


Answer 16:

为了控制的显著数字的数目,使用格式说明符%克。

让我们命名埃米尔的解决方案prettylist2f。 下面是修改之一:

prettylist2g = lambda l : '[%s]' % ', '.join("%.2g" % x for x in l)

用法:

>>> c_e_alpha_eps0 = [299792458., 2.718281828, 0.00729735, 8.8541878e-12]
>>> print(prettylist2f(c_e_alpha_eps0)) # [299792458.00, 2.72, 0.01, 0.00]
>>> print(prettylist2g(c_e_alpha_eps0)) # [3e+08, 2.7, 0.0073, 8.9e-12]

如果你想在显著的位数的灵活性,使用F-字符串格式化来代替:

prettyflexlist = lambda p, l : '[%s]' % ', '.join(f"{x:.{p}}" for x in l)
print(prettyflexlist(3,c_e_alpha_eps0)) # [3e+08, 2.72, 0.0073, 8.85e-12]


Answer 17:

对于Python 3.6,你可以使用F-字符串:

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

print(*[f"{element:.2f}" for element in list_])
#9.00 0.05 0.03 0.01 0.06 0.08

您可以使用打印参数,同时保持代码的可读性很强:

print(*[f"{element:.2f}" for element in list_], sep='|', end='<--')
#9.00|0.05|0.03|0.01|0.06|0.08<--


Answer 18:

我同意SilentGhost的评论,for循环并不坏。 你可以实现你想要什么:

l = [9.0, 0.052999999999999999, 0.032575399999999997, 0.010892799999999999, 0.055702500000000002, 0.079330300000000006]
for x in l: print "%0.2f" % (x)


文章来源: Easy pretty printing of floats in python?