在Python 3中为多个项使用相同的字符串格式

时间:2014-12-02 15:29:48

标签: python python-3.x format

例如,我将以下数字分配给不同的变量:

a = 1.23981321; b = 34; c = 9.567123

在打印这些变量之前,我将它们格式化为4位小数:

'{:.4f} - {:.4f} - {:.4f}'.format(a, b, c)

打印以下内容:

'1.2398 - 34.0000 - 9.5671'

有没有办法声明:.4f一次格式化所有值,而不是为每个占位符{ }分配:.4f

2 个答案:

答案 0 :(得分:3)

a = 1.23981321
b = 34
c = 9.567123

print('{:.4f} - {:.4f} - {:.4f}'.format(a, b, c)) # Original

print('{a:{f}} - {b:{f}} - {c:{f}}'.format(a=a, b=b, c=c, f='.4f')) # New

如果使用关键字参数,这样做会更容易,因此您可以拥有{a},而不是位置参数。这允许您在格式字符串中的多个位置使用格式f = '.4f'

如果你需要保持一切简短,那么你可以混合位置和关键字参数(感谢Martijn提示)并将你的fmt字符串放在一个单独的行上

fmt = '{:{f}} - {:{f}} - {:{f}}'
print(fmt.format(a, b, c, f='.4f'))

答案 1 :(得分:0)

对于像我这样不想键入'{:4f} {:4f} {:4f} {:4f} {:4f} {:4f} {:4f} {:4f}'或类似内容以某种精度或类似精度打印整个列表的人来说,只是一些额外的东西。

如果您使用answer by Ffisegydd中建议的格式字符串,而实际上只想重复某种格式,则可以执行以下操作:

fmtstr = '{:.4f}\t' * len(listOfFloats)
print(fmtstr.format(*listOfFloats))

这将以指定格式打印列表中的所有数字,而无需两次键入格式! (当然,您也可以将字符串乘以任何整数。)

此方法有一个警告:您不能打印8个以-分隔的数字,并且如果没有此字符串,则不能结束。为此,您需要这样的构造:

fmtstr = '{:.4f} - ' * 7 + '{:.4f}'