Python 动态字符串格式化
我遇到了一种情况,直到我计算出另一个数字的长度之前,我并不确定我想怎么格式化某个字符串。
像这样做:
"{0:.2f}".format(#)
效果很好,因为我知道我想在小数点后显示多少位,这里是两位。如果位数可能会变化,那我该怎么做呢?我想把一个叫做B的列表中格式化好的元素放到一个字符串里,而这些元素是根据另一个叫做A的列表中的对应元素来格式化的。
A = ['1.100','5.4','11.1','7']
B = [1.23474927,4.92837087,12.06532387,6.9998123]
我理想中想看到的答案是这样的:
C = ['1.235','4.9','12.1','7']
到目前为止,我知道的有:
1) 我可以通过以下方式计算出A中每个字符串右边有多少位:
places_A = [len(A[i].partition('.')[2]) for i in range(len(A)]
真正的问题是:我该如何动态地告诉format()保持小数点右边那么多位呢?
2 个回答
3
使用传统的字符串格式化方法:
>>> d = 2
>>> f = "%%.%sf" % d
>>> f
'%.2f'
>>> f % 5.0
'5.00'
也就是说,首先动态地创建你的格式字符串,然后用这个格式字符串把你的浮点数转换成字符串。这个概念可以用现代的字符串格式化语法来实现。
10
你只需要更多的替换符号(其实就是更多的{}
):
print "This is a number with {1} places {0:.{1}f}".format(3.14159, 2)
或者,在你给的例子中:
C = ['{0:.{1}f}'.format(b, len(a.partition('.')[2])) for a,b in zip(A,B)]