如何解包并打印元组

3

我是Python(3.x)的初学者,这是我在这里发的第一篇帖子,我正在尝试拆包元组,然后以特定的格式打印它(我的用词可能不太对)。这是我的代码:

w = 45667.778
x = 56785.55
y = 34529.4568
z = 789612.554

nums = (w, x, y, z)
hdr62 = '{:>15} {:>15} {:>15} {:>15}'

print(tuple('${:,.0f}'.format(num).rjust(12, ' ') for num in nums))

我应该如何修改才能解压并使用hdr62格式打印元组?

你能否添加一个链接,指向hdr62格式的说明? - glibdud
hdr62只是一个间距格式——它在上面的“nums”下方被定义。 - Dennis
呵呵...我正在谷歌搜索hdr62,以为这是我从未听说过的某种标准。现在还太早了... - glibdud
2个回答

3

也许我理解有所欠缺,但如果你只想按照hdr62格式对元组nums进行格式化,则可以直接在其上调用str.format,并将数字作为解包的元组传递进去:

>>> print(hdr62.format(*nums))
      45667.778        56785.55      34529.4568      789612.554

如果您实际上想要先在元组项上运行另一种格式,则可以单独执行该操作:
>>> ['${:,.0f}'.format(n) for n in nums]
['$45,668', '$56,786', '$34,529', '$789,613']
>>> print(hdr62.format(*['${:,.0f}'.format(n) for n in nums]))
        $45,668         $56,786         $34,529        $789,613

1
根据您的问题和下面的评论,您可以首先使用元组推导式来格式化您的数字,然后调用格式化。使用星号(*)调用format,如下所示:
nums2 = tuple('${:,.0f}'.format(num).rjust(12, ' ') for num in nums)
print(hdr62.format(*nums2))

如果您调用一个带有星号的函数,并将参数(应该是一个序列)放在括号后面,Python会将序列解包并作为单独的参数传递给函数,因此在这种情况下:
nums2 = tuple('${:,.0f}'.format(num).rjust(12, ' ') for num in nums)
print(hdr62.format(*nums2))

等价于:

nums2 = tuple('${:,.0f}'.format(num).rjust(12, ' ') for num in nums)
print(hdr62.format(nums[0],nums[1],nums[2],nums[3]))

很抱歉,我是一个初学者,无法理解你的答案。我正在尝试使用上面的打印语句和间距hdr62打印4个变量,请问你能否更具体地说明要添加什么以及在哪里添加? - Dennis
我应该在哪里添加 '${:,.0f}' 才能得到正确的数字格式打印输出? - Dennis
@Dennis:啊,你想要格式化你最后一个语句的结果,而不是nums本身吗? - Willem Van Onsem
是的,我希望结果为$45,668 ..... 数字之间有适当的间距,在长度为12的字段中右对齐。 - Dennis
@Dennis:但是你的hdr62说对齐方式应该是15? - Willem Van Onsem
谢谢 - 你的解决方案很好用。我感谢你的帮助。 - Dennis

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