Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python从上到下打印二维列表_Python_Python 3.x_List_Pretty Print - Fatal编程技术网

Python从上到下打印二维列表

Python从上到下打印二维列表,python,python-3.x,list,pretty-print,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

我有一份清单:

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
i=0
j=0
而i
索引器:列表索引超出范围


我能做什么?

您想要列,因此使用
zip
获取列,然后在列表中使用
str.join()
方法连接项目,形成行,最后使用新行字符连接行:

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

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

您需要列,因此使用
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))
您遇到的一个问题是,
网格
存储的内容与您希望打印的内容不同。一个打印输出行不是
网格中的一行,而是一列。Python中交换2D列表中的列和行的标准方法是

zip(*grid)
基本上,
*
网格
分解为单独的行,然后
zip
以我们想要的方式“横向”将它们缝合在一起

现在已经有了可打印的行,需要将字符缝合在一起 在每一行中输入一个字符串,字符之间没有任何分隔符。Pythons
join
字符串方法将把字符缝合在一起,并且
join
前面显示的字符串将是分隔符。因此,

''.join(row)
将字符连接在一起而不使用任何分隔符


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

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

for row in zip(*grid):
    print(''.join(row))
您遇到的一个问题是,
网格
存储的内容与您希望打印的内容不同。一个打印输出行不是
网格中的一行,而是一列。Python中交换2D列表中的列和行的标准方法是

zip(*grid)
基本上,
*
网格
分解为单独的行,然后
zip
以我们想要的方式“横向”将它们缝合在一起

现在已经有了可打印的行,需要将字符缝合在一起 在每一行中输入一个字符串,字符之间没有任何分隔符。Pythons
join
字符串方法将把字符缝合在一起,并且
join
前面显示的字符串将是分隔符。因此,

''.join(row)
将字符连接在一起而不使用任何分隔符


我的代码的其余部分应该对任何学习过Python的人都很清楚。

这是2d列表的转置 所以

输出:


请参见

这是2d列表的转置 所以

输出:


请参见

我很抱歉:D忘记了它:
len(网格[j]):
应该是
len(网格[i]):
为什么不在
循环时使用
而不是
?我认为你的循环不会根据需要旋转网格。我很抱歉:D忘记了它:
len(网格[j]):
应该是
len grid[i]):
为什么不在
循环中使用
,而不是
while
?我认为你的循环不会按照你的需要旋转网格。这是可行的,但我不理解它的语法。你能给我解释一下吗?@user8953265更新了。要了解更多信息,我建议您查看文档。这是可行的,但我不理解它的语法。你能给我解释一下吗?@user8953265更新了。有关更多信息,我建议您查看文档。