为什么Python嵌套for循环遍历2D数组会重复打印3次而非1次?
问题原因
你当前的嵌套循环存在两个逻辑错误:
- 内层循环的遍历对象错误:外层循环的变量
i已经拿到了二维数组中的每一行子列表,你内层循环依然遍历整个twoDarray而非外层得到的i,导致每触发一次外层循环,内层都会完整遍历整个二维数组的所有子列表,外层总共执行3次,最终内容被重复打印3次。 - 内层遍历的对象是子列表而非元素:你当前内层循环拿到的
num依然是每一行的子列表,不是子列表里的单个元素,打印出来的是整行列表而非单个数值。
正确实现方案
方案1:直接遍历元素(Python风格写法)
内层循环改为遍历外层循环拿到的行对象即可,修改后代码如下:
twoDarray = [[10, 15, 20], [25, 30, 35], [45, 50, 60]] # 外层遍历拿到每一行子列表 for row in twoDarray: # 内层遍历当前行的单个元素 for num in row: print(num)
这里把变量名从i改为row是为了提升可读性,你也可以保留原有变量名,只要内层循环遍历外层的i即可。
方案2:下标遍历(符合C++使用习惯)
如果你习惯类似C的下标式遍历,可以用range()配合数组长度实现自定义增量、边界条件的遍历,和C的for循环逻辑完全对齐:
twoDarray = [[10, 15, 20], [25, 30, 35], [45, 50, 60]] # 等价于C++的 for(int i=0; i<rows; i++) for i in range(len(twoDarray)): # 等价于C++的 for(int j=0; j<cols; j++) for j in range(len(twoDarray[i])): print(twoDarray[i][j])
你可以通过调整range()的三个参数(起始值、终止值、步长)实现任意灵活的遍历规则,比如range(1, len(twoDarray), 2)就等价于C++的for(int i=1; i<rows; i+=2)。
内容的提问来源于stack exchange,提问作者Shah Jacob
相关产品推荐
相关产品推荐

