Python中如何将for循环内print输出的向量存入列表
问题根因
- 列表全是重复值:Python列表是可变引用类型,执行
vector_list.append(start)时,存入列表的是start的内存地址引用,不是当前时刻的数值快照。后续循环修改start的元素值时,之前存入列表的所有引用指向同一块内存,内容会同步更新,循环结束后所有元素都会变成最后一次计算得到的start值。 - 变量未定义报错:如果在函数内部直接对全局变量做赋值操作(比如
vector_list = vector_list + x),Python会默认将vector_list识别为函数内的局部变量,执行加法运算时局部作用域从未初始化过这个变量,就会抛出未定义错误。
修复方案
最小改动方式:每次追加坐标时,生成当前start列表的独立副本存入vector_list,不要直接存原列表引用。修正后的完整代码如下:
route001 = (3, 12, 'S', 'S', 'W', 'S', 'S', 'S', 'E', 'E', 'E', 'S', 'S', 'W', 'W', 'S', 'E', 'E', 'E', 'E', 'N', 'N', 'N', 'N', 'W', 'N', 'N', 'E', 'E', 'S', 'E', 'S', 'E', 'S', 'S', 'W', 'S', 'S', 'S', 'S', 'S', 'E', 'N', 'E', 'E') route002 = (12, 11, 'W', 'W', 'S', 'S', 'S', 'W', 'W', 'N', 'N', 'N', 'W', 'W', 'W', 'S', 'S', 'S', 'S', 'E', 'E', 'S', 'W', 'W', 'W', 'W', 'N', 'N', 'W', 'W', 'S', 'S', 'S', 'S', 'E', 'E', 'E', 'S', 'E', 'S', 'E', 'S') route003 = (3, 12, 'S', 'S', 'W', 'S', 'S', 'S', 'W', 'W', 'W', 'S', 'S', 'W', 'W', 'S', 'E', 'E', 'E', 'E', 'N', 'N', 'N', 'N', 'W', 'N', 'N', 'E', 'E', 'S', 'E', 'S', 'E', 'S', 'S', 'W', 'S', 'S', 'S', 'S', 'S', 'E', 'N', 'E', 'E') route_selection = input('Select route 1, 2 or 3 ') if route_selection == "1": selectedRoute = route001 elif route_selection == "2": selectedRoute = route002 elif route_selection == "3": selectedRoute = route003 else: print("error") start = [selectedRoute[0]] + [selectedRoute[1]] directions = selectedRoute[2:] coordinates = {"N": [0, 1], 'E': [1, 0], 'S': [0, -1], 'W': [-1, 0]} vector_list = [] def vectors(): for d in directions: dx, dy = coordinates[d] start[0] += dx start[1] += dy if start[0] < 0 or start[0] > 12: print('Error: This route goes outside the grid') break elif start[1] < 0 or start[1] > 12: print('Error: This route goes outside the grid') break else: print(start) # 存入当前坐标的独立副本,避免后续修改start影响历史值 vector_list.append(list(start)) vectors() print(vector_list)
- 代码运行后
vector_list会按打印顺序存储所有坐标,结构和预期的[[12, 2], [12, 3], [11, 3]...]完全一致,可以直接供后续逻辑调用。 - 当前场景下不需要在函数内加
global vector_list声明:你只是调用列表的append方法修改列表内容,没有给vector_list变量重新赋值,Python可以正常识别到外层作用域的全局变量。
内容的提问来源于stack exchange,提问作者robbo500
相关产品推荐
相关产品推荐

