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