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

Python二维列表循环赋值后输出异常,求原因解释

问题根源与修复方案

你遇到的这个问题,核心出在二维列表的初始化方式上——就是这行代码:

sort_list = [[0]*cols]*rows

为什么会出问题?

当你用[x] * n的方式创建列表时,如果x是可变对象(比如这里的子列表[0]*cols),那么生成的n个元素其实都是同一个对象的引用。换句话说,sort_list[0]和sort_list[1]指向的是同一个列表,不是两个独立的列表!

所以你在循环里做这些操作时:

sort_list[0][i] = dist_list[0][index]
sort_list[1][i] = dist_list[1][index]

其实是在反复修改同一个列表:先给这个列表的第i位赋值dist_list[0][index],然后又把它改成dist_list[1][index]。循环里单独打印sort_list[0][i]时看起来正常,但实际上sort_list[0]和sort_list[1]始终是同一个东西,最后自然会输出完全相同的内容。

怎么修复?

要创建真正独立的子列表,改用列表推导式来初始化二维列表:

sort_list = [[0]*cols for _ in range(rows)]

这个写法会循环rows次,每次都生成一个全新的[0]*cols子列表,每个子列表都是独立的对象,修改其中一个不会影响另一个。

修复后的完整代码

把你的代码修改后应该是这样:

dist_list = [[1,5,9,40,8],[95,77,34,50,60]]
rows = 2  # len(dist_list)
cols = len(dist_list[1])
sort_list = [[0]*cols for _ in range(rows)]  # 这里是修改的地方
tempo = sorted(dist_list[1])

for i in range(cols):
    index = dist_list[1].index(tempo[i])
    sort_list[0][i] = dist_list[0][index]
    print(sort_list[0][i])  # 现在值正确
    sort_list[1][i] = dist_list[1][index]
    print(sort_list[0][i])  # 现在值依然正确

print(dist_list)
print(sort_list[0])  # 正常输出预期结果
print(sort_list[1])

运行这段代码后,sort_list就会按照你的预期,第一个子列表对应dist_list[0]按dist_list[1]排序后的结果,第二个子列表是排序后的dist_list[1]。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:46:58