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

Python使用*初始化嵌套列表赋值后所有元素为最后一个值的问题

问题根源

你代码的问题出在初始化finalList的写法:finalList = [["none",0]]*len(list1)。
这种用乘法复制列表的操作,不会创建N个独立的子列表,只会把同一个子列表的内存引用复制N次存到外层列表里。也就是说你得到的finalList里,所有位置指向的都是同一个子列表对象,修改任意一个位置的子列表内容,其他所有位置都会同步变化。
你的循环每次执行finalList[i][0] = list1[i],本质都是在改这同一个公共子列表的首元素,最后一次循环赋值的内容是list1的最后一个元素30_39,所以最终所有子列表的首项全是这个值。

正确实现方案

最简洁的写法是直接用列表推导式,每次迭代生成独立的新子列表,从根源避免引用重复问题:

list1 = ['Low_Class', '40_49', '50_59', 'Marital_Status', '60_plus', '30_39']
finalList = [[item, 0] for item in list1]

运行后得到的结果就是你需要的:

[['Low_Class', 0], ['40_49', 0], ['50_59', 0], ['Marital_Status', 0], ['60_plus', 0], ['30_39', 0]]

如果你坚持要保留「先初始化固定长度列表、再循环赋值」的写法,初始化阶段也要用列表推导式生成独立子列表,不要用乘法复制可变对象:

# 错误写法(复用同一个子列表引用):finalList = [["none",0]]*len(list1)
# 正确初始化(每个位置都是独立新子列表)
finalList = [["none", 0] for _ in range(len(list1))]
for i in range(len(list1)):
    finalList[i][0] = list1[i]

注意:用*复制列表的写法仅适用于整数、浮点数、字符串、元组这类不可变对象;如果元素是列表、字典这类可变对象,用乘法复制一定会出现多个位置引用同一个对象的联动问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 02:15:38