Python 如何按小数点位置对齐数字?

Python 如何按小数点位置对齐数字?,python,python-3.x,alignment,numeric,Python,Python 3.x,Alignment,Numeric,我的桌子: 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

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])
上述结果如表1所示,但小数未对齐

更新
我根据列表中元素的长度调整了Francisco的解决方案

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
印刷品:

         2               4,5           100             400     
         3              20              10             100     
         4,2        10.000             500             600     
         9,2        10.024,5           610           1.100
基本上,它所做的是检查字符串中是否有逗号

如果它这样做了,它会检查它的位置,将字符串居中到右边,检查有多少个字符,而不计算逗号后面的所有字符,然后将它居中到左边,这次计算逗号后面的位置


如果字符串中没有逗号,它只是将字符串左右居中。

您似乎将
视为十进制分隔符,但最后一列的最后一行中有一个
。。。我认为
在这里没有得到特殊处理?@mgilson,我使用西欧格式。小数='、'和千='。'Francisco,它在我的系统(python3)上不起作用。很多错误。
4,2(无,)10.000(无,)500(无,)600(无,)
很抱歉,我用Python3实现了这一点。我想我的问题没有解决方案?你从来不会在循环中增加
r
,你必须更改
maxafter.append(maxlengteafter)
to
maxafter.append(maxlengteafter+1)
看起来不错
         2               4,5           100             400     
         3              20              10             100     
         4,2        10.000             500             600     
         9,2        10.024,5           610           1.100