【发布时间】:2016-08-01 22:14:56
【问题描述】:
我的桌子:
2 4,5 100 400
3 20 10 100
4,2 10.000 500 600
9,2 10.024,5 610 1.100
mylist = [['2', '4,5', '100', '400'], ['3', '20', '10', '100'], ['4,2', '10.000', '500', '600'], ['9,2', '10.024,5', '610', '1.100']]
我怎样才能像这样对齐数字:
2 4,5 100 400
3 20 10 100
4,2 10.000 500 600
9,2 10.024,5 610 1.100
我做了什么:
for i in range(0, len(mylist)):
'{:>10} {:>10} {:>10} {:>10}'.format(mylist[i][0], mylist[i][1], mylist[i][2], mylist[i][3])
这给出了第一张表中的上述结果,但小数点未对齐。
更新
我根据任何列表中元素的长度调整了弗朗西斯科的解决方案。
mylist = [['1300', '300', '300'], ['2300,5', '300,5', '300,5'], ['3600000000000', '6000000', '6000000'], ['4200,2345', '200,2345', '200,2345'], ['5301', '301', '301'], ['6200', '200', '200'], ['7300', '300', '300000000'], ['8300,5', '300,500000', '300,5'], ['960000', '600', '6000'], ['10200,2345', '200999,2345', '200,2345'], ['11301', '301', '301'], ['12200', '200', '200'], ['13300', '300', '300'], ['14300,5', '300,5', '300,5']]
column2row = zip(*mylist)
maxbefore = []
maxafter = []
for m in column2row:
maxlengthbefore = 0
maxlengthafter = 0
for e in m:
if ',' in e:
lengthbefore = len(str(e).split(",")[0])
if lengthbefore > maxlengthbefore:
maxlengthbefore = lengthbefore
lengthafter = len(str(e).split(",")[1])
if lengthafter > maxlengthafter:
maxlengthafter = lengthafter
else:
lengthbefore = len(str(e))
if lengthbefore > maxlengthbefore:
maxlengthbefore = lengthbefore
maxbefore.append(maxlengthbefore)
maxafter.append(maxlengthafter + 1)
for m in mylist:
r = 0
for e in m:
if ',' in e:
print(e.rjust(int(maxbefore[r]) + len(e) - e.index(',')).ljust(int(maxbefore[r])+int(maxafter[r])), end=' ')
else:
print(e.rjust(int(maxbefore[r])).ljust(int(maxbefore[r])+int(maxafter[r])), end=' ')
r += 1
print()
输出
1300 300 300
2300,5 300,5 300,5
3600000000000 6000000 6000000
4200,2345 200,2345 200,2345
5301 301 301
6200 200 200
7300 300 300000000
8300,5 300,500000 300,5
960000 600 6000
10200,2345 200999,2345 200,2345
11301 301 301
12200 200 200
13300 300 300
14300,5 300,5 300,5
【问题讨论】:
-
您似乎将
,视为小数点分隔符,但最后一列的最后一行有一个....我认为.没有在这里得到特殊待遇? -
@mgilson,我使用西欧格式。小数 = ',' 和千位 = '.'
标签: python python-3.x alignment numeric