所以我有一个函数,它根据程序中其他地方收集的数据创建一个小小的星表。虽然该表生成了正确的输出,但由于每个数字中的字符数发生了变化,因此它取消了该表的对齐。例如,
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]))
发布于 2013-06-14 01:21:30
str.format
已经可以指定对齐方式。您可以使用{0:>5}
来完成此操作;这将使参数0
向右对齐5个字符。然后,我们可以使用相等地显示所有数字所需的最大位数来动态构建格式字符串:
>>> lower = [70, 79, 88, 97, 106, 115]
>>> upper = [78, 87, 96, 105, 114, 123]
>>> num = [5, 3, 4, 2, 6, 4]
>>> digits = len(str(max(lower + upper)))
>>> digits
3
>>> f = '{0:>%d}-{1:>%d}: {2}' % (digits, digits)
>>> f
'{0:>3}-{1:>3}: {2}'
>>> for i in range(len(num)):
print(f.format(lower[i], upper[i], '*' * num[i]))
70- 78: *****
79- 87: ***
88- 96: ****
97-105: **
106-114: ******
115-123: ****
实际上,您甚至可以在此处使用带有嵌套字段的单一格式字符串:
>>> for i in range(len(num)):
print('{0:>{numLength}}-{1:>{numLength}}: {2}'.format(lower[i], upper[i], '*' * num[i], numLength=digits))
发布于 2013-06-13 23:55:14
这应该能起到作用。我认为有一些聪明的方法。
print '70-78:'.ljust(10) + '*****'
您还可以使用expandtabs()
print ('70-78'+'\t'+ '*****').expandtabs(10)
发布于 2013-06-14 00:11:04
lower = [70, 79, 88, 97, 106]
upper = [78, 87, 105, 114, 123]
num = [5, 3, 4, 2, 6, 4]
for l, u, n in zip(lower, upper, num):
print('{0:<9} {1}'.format('{0}-{1}:'.format(l, u), '*' * n))
http://docs.python.org/3/library/string.html#format-specification-mini-language
https://stackoverflow.com/questions/17091446
复制相似问题