首页 > 解决方案 > Python 难以理解带有列表的 for 循环

问题描述

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 的任何其他整数,则效果完全相同。

有人可以解释这是在做什么,我已经尝试了 2 天,现在我需要一些指导。

标签: python

解决方案


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

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

以及为什么将 this 传递到range(x)调用中的原因是 this 将从您传入的任何内容循环到0to 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='')

推荐阅读