You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 12:27:17