Python字符串格式化实时操作

4
我是一名能翻译文本的助手。
我有一个这样的情况,即在计算其他数字的长度之前,我不确定如何格式化某些字符串。
可以做如下操作:
"{0:.2f}".format(#)

这段代码之所以有效,是因为我知道我想要在小数点后显示很多位,比如两位。但如果需要显示的位数不确定怎么办?我该如何对列表B中的元素进行动态字符串格式化(即将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()函数保留小数点右侧那么多位?

1
在使用变量作为格式时没有任何问题。例如,fmt="{0:.2f}" 然后 fmt.format(#) - Octopus
这是有效的,例如 ("{0:." + str(places_A) + "f}").format(A) - njzk2
@Octopus 他想知道如何制作 .2 变量。 - Tim
2个回答

9

你只需要更多的牛铃声(实际上,需要更多的替换: {}):

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)]

非常好 - 这正是我在寻找的!参考资料也很不错。 - astromax
2
嗯,{} 确实看起来像是一个侧着的牛铃。我正式提出一个新名字:以后应该将 {} 括号称为“牛铃”。 - Robᵩ

3

使用经典的字符串格式化:

>>> d = 2
>>> f = "%%.%sf" % d
>>> f
'%.2f'
>>> f % 5.0
'5.00'

也就是说,首先动态创建你的格式字符串,然后使用该格式字符串将你的浮点数转换为字符串。这个概念可以转化为现代字符串格式化语法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接