我有一份清单:
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:列表索引超出范围
我该怎么办?
答案 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', '.', '.', '.', '.']]