我的情况是,在我计算其他数字的长度之前,我不一定知道如何格式化字符串。
做类似的事情:
"{0:.2f}".format(#)
效果很好,因为我知道我想要显示那么多地方,在这种情况下,两个地方超过了小数点。如果地点数量有变化怎么办?如何从名为A的列表的相应元素中对名为B的列表元素进行动态字符串格式化(即我希望将适当格式化的B元素放入字符串中)?
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()以保留小数点右边的那么多位置?
答案 0 :(得分:5)
你只需要更多的母牛(实际上,更多的替代品:{}
):
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)]
答案 1 :(得分:2)
使用经典字符串格式:
>>> d = 2
>>> f = "%%.%sf" % d
>>> f
'%.2f'
>>> f % 5.0
'5.00'
即,首先动态创建格式字符串,然后使用该格式字符串将float转换为字符串。这个概念可以翻译成现代字符串格式化语法。