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

Python中替换嵌套列表值遇问题:代码执行结果异常求助

问题描述

我运行以下Python代码未得到预期结果,怀疑问题出在嵌套列表的数值修改上。

预期结果是每次迭代生成不同的子列表,如[[e, r], [h, j], [x, y]],但实际所有子列表都是最后一次的数值,形如[[x, y], [x, y], [x, y]]。我尝试用x[k][i]操作嵌套列表元素,但效果不佳,恳请帮忙解决。

代码如下:

def f(x1,x2):
    return 1.5*(x1)**2+0.5*(x2**2)-x1*x2-2*x1
def f_tag_x1 (lst):
    x2=lst[1]
    x1=lst[0]
    return -((3*x1-x2-2)/3)
def f_tag_x2 (lst):
    x2=lst[1]
    x1=lst[0]
    return (x1-x2)
demsions=2
k=1
x=[[-2,4]]
ftags=[f_tag_x1,f_tag_x2]
while (k<3):
    x.append(x[k-1])
    for i in range(0,demsions):
        if i==0:
            x[k][i]=(x[k-1][i]+ftags[i](x[k-1]))
        else:
            x[k][i]=(x[k][i]+ftags[i](x[k]))
    k=k+1
    
        
print(x)
问题原因与解决方法
  • 核心问题:x.append(x[k-1])没有创建新的列表,只是把原列表的引用添加到了外层列表。后续修改x[k]时,所有指向该列表对象的引用都会同步更新,导致最终所有子列表显示的都是最后一次修改的结果。
  • 解决办法:添加子列表时必须创建原列表的副本,而非直接引用,常用的几种方式:
    1. 使用列表的copy()方法:x.append(x[k-1].copy())
    2. 使用切片操作生成副本:x.append(x[k-1][:])
    3. 使用list()构造函数:x.append(list(x[k-1]))

修改后的代码示例:

def f(x1,x2):
    return 1.5*(x1)**2+0.5*(x2**2)-x1*x2-2*x1
def f_tag_x1 (lst):
    x2=lst[1]
    x1=lst[0]
    return -((3*x1-x2-2)/3)
def f_tag_x2 (lst):
    x2=lst[1]
    x1=lst[0]
    return (x1-x2)
demsions=2
k=1
x=[[-2,4]]
ftags=[f_tag_x1,f_tag_x2]
while (k<3):
    # 创建原列表的副本,避免引用同一对象
    x.append(x[k-1].copy())
    for i in range(0,demsions):
        if i==0:
            x[k][i]=(x[k-1][i]+ftags[i](x[k-1]))
        else:
            x[k][i]=(x[k][i]+ftags[i](x[k]))
    k=k+1
    
        
print(x)

运行修改后的代码,即可得到每次迭代独立的子列表,符合预期结果。

内容的提问来源于stack exchange,提问作者Itay Zaada

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 04:35:29