Python 从上到下打印二维列表

Python printing a 2d list from top to bottom

我有一个列表:

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: list index out of range

我能做什么?

您需要列,因此请使用 zip 获取列,然后在列表理解中使用 str.join() 方法连接项目以形成行,最后使用换行符连接行。 :

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

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

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

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

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

zip(*grid)

基本上,*grid 分成单独的行,然后 zip 以我们想要的方式将它们拼接在一起 "sideways"。

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

''.join(row)

无需任何定界符即可将您的字符连接在一起。

学习过的人应该清楚我的其余代码Python。

这是二维列表的转置 所以

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', '.', '.', '.', '.']]