Python从上到下打印一个二维列表

时间:2018-05-05 13:40:11

标签: python python-3.x list pretty-print

我有一份清单:

grid = [['.', '.', '.', '.', '.', '.'],
    ['.', '0', '0', '.', '.', '.'],
    ['0', '0', '0', '0', '.', '.'],
    ['0', '0', '0', '0', '0', '.'],
    ['.', '0', '0', '0', '0', '0'],
    ['0', '0', '0', '0', '0', '.'],
    ['0', '0', '0', '0', '.', '.'],
    ['.', '0', '0', '.', '.', '.'],
    ['.', '.', '.', '.', '.', '.']]

我希望像这样打印出来:

..00.00..
.0000000.
.0000000.
..00000..
...000...
....0....

我尝试使用以下代码,但它会给我一个

i = 0
j = 0
while i < len(grid):    
    while j < len(grid[j]):
        if i == len(grid)-1:
            print(grid[i][j])
            j = j + 1
        else:
            print(grid[i][j], end='')
            i = i + 1
  

IndexError:列表索引超出范围

我该怎么办?

3 个答案:

答案 0 :(得分:3)

您希望列使用zip来获取列,然后在列表解析中使用str.join()方法连接项以形成行,最后使用换行符连接行。:< / p>

In [89]: print('\n'.join([''.join(c) for c in zip(*grid)]))

..00.00..
.0000000.
.0000000.
..00000..
...000...
....0....

答案 1 :(得分:0)

@Kasramvd的答案非常好,应该仍然是公认的答案。但这里有一个更容易理解的答案,以及一些解释。

for row in zip(*grid):
    print(''.join(row))

您遇到的一个问题是,grid存储的内容与您要打印的内容不同。一个打印输出行不是grid中的一行,而是一列。 Python中用于交换2D列表中的列和行的标准配方是

zip(*grid)

基本上,*会将grid分成不同的行,而zip会以我们想要的方式将它们“横向”拼接在一起。

现在您有可打印的行,您需要将字符拼接在一起 在每一行中成为单个字符串,字符之间没有任何分隔符。字符串的Pythons join方法将字符拼接在一起,join之前显示的字符串将成为分隔符。因此,

''.join(row)

将你的角色连接在一起,没有任何分隔符。

我学习Python的任何人都应该清楚我的其余代码。

答案 2 :(得分:0)

这是2d列表的转置 所以

import numpy as np
np.array(grid).T.tolist()

出:

[['.', '.', '0', '0', '.', '0', '0', '.', '.'],
 ['.', '0', '0', '0', '0', '0', '0', '0', '.'],
 ['.', '0', '0', '0', '0', '0', '0', '0', '.'],
 ['.', '.', '0', '0', '0', '0', '0', '.', '.'],
 ['.', '.', '.', '0', '0', '0', '.', '.', '.'],
 ['.', '.', '.', '.', '0', '.', '.', '.', '.']]

https://stackoverflow.com/a/6473727