关于数组:将列表作为列打印,列之间的间距相等

Printing a list of list as columns with an equal amount of space inbetween

本问题已经有最佳答案,请猛点这里访问。

我在python中有一个列表,列表中的每个列表都有相同数量的元素。

1
2
3
sample_list = [['1','22222222222222222','333'],
               ['111111111','2','3'],
               ['1','2','3']]

我想打印出列表中的元素,使它们看起来像这样。

1
2
3
1          22222222222222222  333
111111111  2                  3
1          2                  3

在到下一列的最长项之间有两个空格。因此,在第二行的第一列中,1的序列将继续,而另两个空格将在下一列继续时继续。我不知道每个元素的确切长度,所以仅仅使用制表符( )是行不通的。如何将嵌套列表打印到由两个空格分隔的列表中?

编辑:我希望尽可能避免使用外部模块,我需要它位于python 2中。


像这样:

1
2
3
sample_list = [['1','22222222222222222','333'],
               ['111111111','2','3'],
               ['1','2','3']]

替代方案1:

1
2
3
4
5
6
7
# Store max lengths
l = [len(max(i, key=len)) for i in zip(*sample_list)]

for item in sample_list:
    for idx in range(len(l)):
        print(item[idx].ljust(l[idx]), end='  ')
    print()

备选方案2(可读性较低,但无伪影)

1
2
3
4
5
6
# Store max lengths
l = [len(max(i, key=len)) for i in zip(*sample_list)]

print('
'.join('  '.join(item[i].ljust(l[i]) for i in range(len(l)))
              for item in sample_list))

备选方案1(python2):

1
2
3
4
5
6
7
# Store max lengths
l = [len(max(i, key=len)) for i in zip(*sample_list)]

for item in sample_list:
    for idx in range(len(l)):
        print item[idx].ljust(l[idx]),"",
    print
1
2
3
1          22222222222222222  333  
111111111  2                  3    
1          2                  3