如何以网格形式打印一个列表中的多个列表?

3
如果我有一个列表的列表,比如([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')

但我不知道如何像上面的例子一样将每个列表都放在单独的行中。

" ".join(i) 应该可以工作。 - Udy
@Udy同意使用“生产”代码,但这可能是来自介绍控制流和变量的课程,所以展示如何制作香肠是很好的。 - YXD
3个回答

2
也许只需在主函数中添加一个空的打印语句:
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()

我在你的代码处添加了print('\n')。但是当我运行它时,最后一行出现了一个“None”,就像第1行是1,2,3,4,5等。并且在最后一行,会显示一个“None”。为什么会出现这种情况? - colalove
我在print语句中添加了'\n',但它只是在打印的数字之间添加了一个空行,没有出现None。你是如何运行这段代码的? - luislhl

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

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

str.center(width[, fillchar])

返回长度为width的居中字符串。填充使用指定的fillchar(默认为ASCII空格)。如果width小于或等于len(s),则返回原始字符串。

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)

它从值创建单个字符串。因此,现在字符串包含整行。

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

它从上一步骤中获取经过处理的行(字符串),并使用换行符将它们连接起来,因此结果是 row1\nron2\nrow3

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