Python嵌套循环中列迭代范围随行迭代递减的问题求助
问题根源与修复方案
问题出在循环变量和函数参数重名:
- 你用函数参数的
r作为外层循环变量,虽然外层循环的range(r)初始用的是参数值,但内层循环的问题更关键。 - 内层循环直接复用了参数
c作为变量名,第一次进入内层时,range(c)用的是传入的初始列数(比如10),但循环结束后c会变成最后一次迭代的索引(比如9)。下一次外层循环执行时,内层的range(c)就会用这个被修改后的c值,导致列的迭代范围越来越小。
修复方法很简单,把循环变量换成和参数不同的名字,避免覆盖原参数值:
def PDMap(r,c,sites): def distance2(x1,y1,x2,y2): return (x1-x2)**2 +(y1-y2)**2 numberofsite= len(sites) map1 = createZeroMatrix(r,c) # 替换循环变量名,不再复用参数r、c for row in range(r): for col in range(c): distancelist = [] for i in range(len(sites)): distancelist.append(distance2(row, col, sites[i][0], sites[i][1])) if len(set(distancelist)) < 3: map1[row][col] = "X" else: map1[row][col] = distancelist.index(min(distancelist)) return map1
修改后,循环时使用的r和c始终是函数传入的原始行列数,列的迭代范围就不会递减了。
内容的提问来源于stack exchange,提问作者nic
相关产品推荐
相关产品推荐

