如何以网格格式打印列表列表?

时间:2015-04-26 19:27:47

标签: python list

如果我有一个列表,如([1,2,3,4,5],[2,4,6,8,10],[3,6,9,12,15]) 如何以网格格式在屏幕上打印?就像:

1 2 3 4 5
2 4 6 8 10
3 6 9 12 15

我的代码就像

def print_table(listx):
    """returns a grid of a list of lists of numbers

    list of list -> grid"""
    for lists in listx:
        for i in lists:
            print(i,end='\t')

但我不知道如何将每个列表放在一行中,如上例所示。

3 个答案:

答案 0 :(得分:1)

也许只需在主要内容上添加空白字体:

def print_table(listx):
    """returns a grid of a list of lists of numbers

    list of list -> grid"""
    for lists in listx:
        for i in lists:
            print(i,end='\t')
        print()

答案 1 :(得分:0)

如果元素的宽度变化超过制表符宽度,则可以使用固定宽度列(用空格填充):

>>> for x in listx:
...     for y in x:
...         print('{0:<10}'.format(y), end='')
...     print()
...
1         2         3         4         5
2         4         6         8         10
3         6         9         12        15

答案 2 :(得分:0)

我的解决方案创建了一个字符串,其中包含行和\n中以空格分隔的数字 - 分隔的行。它使用str.center方法和生成器表达式。

  

str.center(width[, fillchar])

     

以长度宽度的字符串为中心返回。使用指定的fillchar完成填充(默认为ASCII空间)。原本的   如果width小于或等于len(s),则返回string。

def as_string(seq_of_rows):
    return '\n'.join(''.join(str(i).center(5) for i in row) for row in seq_of_rows)
l = ([1,2,3,4,5],[2,4,6,8,10],[3,6,9,12,15])
print as_string(l)

输出:

  1    2    3    4    5  
  2    4    6    8    10 
  3    6    9    12   15

让我们分手吧:

str(i).center(5) for i in row

迭代行,将值转换为字符串并调用center方法。结果是空格填充值。

''.join(sequence_above)

它从值创建单个字符串。所以现在,string包含整行。

'\n'.join(processed_row row in seq_of_rows)

它从前一步骤获取已处理的行(字符串)并使用换行符连接它们,因此结果为row1\nron2\nrow3