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

Python列表切片传入函数后未修改原列表?求原因及解决办法

问题原因与解决方法

为什么代码不生效?

调用Test(L[1:])时,L[1:]是列表切片操作,它会生成原列表从索引1开始的元素的新副本,而非原列表的引用。Test函数里修改的只是这个临时副本的元素,原列表L完全没被改动,所以打印结果还是初始值。

解决方法

方法一:修改函数返回结果并赋值回原列表

调整Test函数让它返回处理后的列表,再将结果赋值给原列表的切片位置:

def Test(L):
    for i in range(len(L)):
        L[i] = L[i][1:]
    return L

L = ["-stackoverflow", "-Python", "-C++"]
L[1:] = Test(L[1:])
print(L)

方法二:直接操作原列表的指定索引范围

修改函数,传入起始索引,直接在原列表上修改对应位置的元素:

def Test(L, start_idx):
    for i in range(start_idx, len(L)):
        L[i] = L[i][1:]

L = ["-stackoverflow", "-Python", "-C++"]
Test(L, 1)
print(L)

方法三:用列表推导式简化操作

无需额外函数,直接通过列表推导式处理切片部分并赋值:

L = ["-stackoverflow", "-Python", "-C++"]
L[1:] = [s[1:] for s in L[1:]]
print(L)

以上三种方法都能得到期望输出:['-stackoverflow', 'Python', 'C++']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 09:25:25