字符串格式对齐

3
我对如何解决这个格式问题感到困惑。我怀疑这是因为有两个变量而不是一个,导致一切都错了。
目前这是我的输出...
Bin Range    Count
0-9           1   
20-29          1 

我想要实现的是...

Bin range    Count
0-9            1
20-29          1

这段代码的内容是...

counter = collections.Counter()
for py_filename in glob.glob('*.py'):
    with open(py_filename) as f:
        linecount = sum(1 for line in f)
        counter[linecount//10] += 1

print('\n{0}    {1}'.format('Bin Range', 'Count'))

for i,n in sorted(counter.items()):
    print('{}-{:<12}{:<4}'.format(i * 10, (i + 1) * 10 - 1, n))

我假设如果0-9部分都是一个变量,那么这就不是一个问题了,但是否有一种方法可以将两个变量分组到一个格式规则下,或者我只需要找出处理结果更有效的方法。感谢您的帮助!
2个回答

2
为什么不使用一个子格式,例如:
for i,n in sorted(counter.items()):
    binrange='{}-{}'.format(i*10, (i + 1) * 10 - 1)
    print('{:<12}{:<4}'.format(binrange, n))

太完美了!正是我想要的,现在我会记住这个方法以备将来需要。 - Ergo

1
您可以将width设置为与第一个项目的字符串长度相关的变量:
In [1]: items = [[0, 9, 1], [20, 29, 1]]

In [2]: for x, y, z in items:
   ...:     print '{}-{:<{width}}{}'.format(x, y, z, width=10-len(str(x)))
   ...:     
0-9        1
20-29      1

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