python - 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 天,现在我需要一些指导。
解决方案
当您这样做时len(grid)
,只会返回网格中有多少列表或“行”的长度。但是,这并没有告诉您有关每个列表/行的长度的任何信息。要获取该信息,您可以访问一个列表并获取该集合的长度,假设它们的长度都相同。
len(grid[0])
将为您提供第一个列表的长度(在索引 0 处),这基本上是列的数量。
以及为什么将 this 传递到range(x)
调用中的原因是 this 将从您传入的任何内容循环到0
to 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='')
推荐阅读
- c++ - 推断指向成员函数模板参数的指针的参数类型
- xml - 如何正确忽略 xslt 中的 xml 元素
- ruby - 如何让 terminal-notifier-guard 显示自定义图标?
- amazon-web-services - 调用 CreateDBInstanceReadReplica 操作时发生错误(InvalidParameterValue):无法验证 PreSignedUrl
- primefaces - 在 preRenderComponent 中设置的渲染 Primefaces 列过滤器值
- python - 制作问答游戏(Python)
- elasticsearch - 从特定容器 kubernetes elastik 获取日志
- ios - Angular mobileQuery.addEventListener 不是 safari 中的函数,如何修复?
- rsyslog - 在 syslog-ng 中使用来自 rsyslog 的元数据
- laravel - 如何在 Laravel 中实现具有多对多关系的具有 6 个外键的表