Python努力理解列表的循环

时间:2018-11-16 21:55:47

标签: python

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

 def gridOutput(grid):
    for s in range(len(grid[0])):
        print()
        for i in range(len(grid)):
            print(grid[i][s],end='')
 gridOutput(grid)

这是打印我希望打印的内容。它循环遍历每个列表的每个元素。像[0,1] [0,2] [0,3] [0,4] [0,5]等

但是我不知道代码是如何做到的。

range(len(grid[0])): 

为什么在返回列表长度时使用len?而且我不知道[0]在做什么,如果我将其设置为9以下的任何其他整数,则其工作原理完全相同。

有人可以解释一下这是怎么回事,我已经尝试了两天,现在我需要一些指导。

3 个答案:

答案 0 :(得分:1)

当您执行len(grid)时,只会返回网格中有多少个列表或“行”的长度。但是,这并不能告诉您有关每个列表/行的长度的任何信息。要获取该信息,请访问列表并假设它们的长度相同,并获取该集合的长度。

len(grid[0])将为您提供第一个列表的长度(在索引0处),该长度基本上是列数。

为什么将此传递到range(x)调用中,是因为它将从您输入的任何内容从0循环到x。所以该循环将遍历所有外循环中各列的索引。


编辑: 要更改代码以使其支持网格中不同长度的子列表,您应该获取列表中每个子列表的长度,而不仅仅是第一个子列表的长度。为此,您必须像这样交换for循环的顺序:

def gridOutput(grid):
    for i in range(len(grid)):
        print()
        for s in range(len(grid[i])): # Get length of current sub-list
            print(grid[i][s], end='')

答案 1 :(得分:0)

它基本上从二维列表中打印出每个元素
grid [0] => ['。','。','。','。','。','。']
len(grid [0])=> 6
对于s在范围(len(grid [0]))=> s = 0,1 ...至5
您可以使用numpy清理代码

答案 2 :(得分:0)

len(grid[0])获取网格第一行中的元素数。 在这种情况下,6 =>列数。 因此,第一个循环运行6次,并且每次迭代都会创建第二个循环: for i in range(len(grid))

len(grid)获取网格本身中的元素数,在您的情况下为9 =>行数。

快速步行:

在第一次迭代中s = 0,i = 0 =>第一行中的第一列
在第二次迭代中s = 0,i = 1 =>第二行中的第一列 等等...

希望这会有所帮助。