我有一个函数,它根据程序中其他地方收集的数据创建一个小的星星表。虽然该表产生正确的输出,但由于每个数字中的字符数发生变化,它会使表不对齐。例如,
70-78: *****
79-87: ***
88-96: ****
97-105: **
106-114: ******
115-123: ****
有没有什么方法可以对齐星星,使输出像这样:
70-78: *****
79-87: ***
88-96: ****
97-105: **
106-114: ******
115-123: ****
下面是我当前打印表格的方式。
for x in range(numClasses):
print('{0}-{1}: {2}'.format(lower[x],upper[x],"*"*num[x]))
5条答案
按热度按时间nwsw7zdq1#
str.format
已经可以指定对齐方式了,你可以使用{0:>5}
;这将使参数0
向右对齐5个字符,然后我们可以动态地构建一个格式字符串,使用最大位数来平等地显示所有数字:实际上,您甚至可以在嵌套字段中使用单个格式字符串:
ftf50wuq2#
这个应该可以了我想肯定有聪明的办法。
您还可以使用
expandtabs()
f2uvfpb93#
http://docs.python.org/3/library/string.html#format-specification-mini-language
roejwanj4#
好吧,虽然我使用的解决方案是无可否认的ad-hoc,但它工作正常,比目前的答案更好地扩展。基本上它只是VR 17建议的方法,但多了一点,以便标签大小随数据集扩展,而不仅仅是硬编码。
首先,我创建了一个方法,返回某个数字中的数字字符。
然后,我对
lower
和upper
数据集的最后一个点使用charNum()
函数,每个列表只需要使用最后一个点,因为最后一个点是最大的数字,然后我计算非数字字符(破折号、分号和空格),并进行相应的调整。因此,最后一个tabLength变量如下所示:
然后,我将
tabLength
变量插入expandTab()
函数以获得适当的间距,下面是一些示例输出:我能看到的唯一问题是,如果我想把它扩展到一个表或其他东西,那么标签会很奇怪。如果我这样做了,我可能会研究
ljust
和rjust
,我现在还不太熟悉。我会把这个问题留一小会儿,以防有人提出更好的答案。iyfamqjs5#
简单的方法(在您的情况下)是用制表符代替空格:
另一种方法是使用
str.ljust
: