漂亮的2D Python打印列表

发布于 2021-01-29 15:06:05

是否有一种简单的内置方法将2D Python列表打印为2D矩阵?

所以这:

[["A", "B"], ["C", "D"]]

会变成像

A    B
C    D

我找到了pprint模块,但是它似乎并没有实现我想要的功能。

关注者
0
被浏览
66
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    为了使事情变得有趣,让我们尝试使用更大的矩阵:

    matrix = [
       ["Ah!",  "We do have some Camembert", "sir"],
       ["It's a bit", "runny", "sir"],
       ["Well,",  "as a matter of fact it's", "very runny, sir"],
       ["I think it's runnier",  "than you",  "like it, sir"]
    ]
    
    s = [[str(e) for e in row] for row in matrix]
    lens = [max(map(len, col)) for col in zip(*s)]
    fmt = '\t'.join('{{:{}}}'.format(x) for x in lens)
    table = [fmt.format(*row) for row in s]
    print '\n'.join(table)
    

    输出:

    Ah!                     We do have some Camembert   sir            
    It's a bit              runny                       sir            
    Well,                   as a matter of fact it's    very runny, sir
    I think it's runnier    than you                    like it, sir
    

    UPD:对于多行单元格,应如下所示:

    text = [
        ["Ah!",  "We do have\nsome Camembert", "sir"],
        ["It's a bit", "runny", "sir"],
        ["Well,",  "as a matter\nof fact it's", "very runny,\nsir"],
        ["I think it's\nrunnier",  "than you",  "like it,\nsir"]
    ]
    
    from itertools import chain, izip_longest
    
    matrix = chain.from_iterable(
        izip_longest(
            *(x.splitlines() for x in y), 
            fillvalue='') 
        for y in text)
    

    然后应用上面的代码。

    另请参见http://pypi.python.org/pypi/texttable



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看