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', '.', '.', '.', '.']]
见
我有一个列表:
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', '.', '.', '.', '.']]
见