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

循环中为嵌套列表赋值时Numpy的mean、max、min函数返回异常结果

Python嵌套列表赋值异常问题分析与解决

问题代码

from numpy import mean, max, min


table = [[0] * 3] * 2
for i, l in enumerate([[1, 2, 3], [4, 5, 6]]):
    print(l)
    table[i][0] = mean(l)
    table[i][1] = max(l)
    table[i][2] = min(l)
print(table)

现象

运行时print(l)输出正常,但最终table结果不符合预期:

  • 实际输出:
[1, 2, 3]
[4, 5, 6]
[[5.0, 6, 4], [5.0, 6, 4]]
  • 预期输出:
[1, 2, 3]
[4, 5, 6]
[[2.0, 3, 1], [5.0, 6, 4]]

原因分析

问题出在嵌套列表的创建方式:[[0] * 3] * 2并不是创建两个独立的长度为3的子列表,而是把[0,0,0]这个列表对象的引用复制了两次。也就是说,table[0]和table[1]指向的是同一个内存地址的列表。

当第一次循环修改table[0][0]、table[0][1]、table[0][2]时,其实是修改了那个共享的子列表;第二次循环修改table[1]对应的元素时,还是修改同一个子列表,最终两次修改的结果会覆盖,导致两个子列表内容完全相同。

解决方案

改用列表推导式创建独立的子列表,确保每个子列表都是全新的对象:

from numpy import mean, max, min


# 用列表推导式创建嵌套列表,每个子列表独立
table = [[0] * 3 for _ in range(2)]
for i, l in enumerate([[1, 2, 3], [4, 5, 6]]):
    print(l)
    table[i][0] = mean(l)
    table[i][1] = max(l)
    table[i][2] = min(l)
print(table)

运行修改后的代码,就能得到预期输出:

[1, 2, 3]
[4, 5, 6]
[[2.0, 3, 1], [5.0, 6, 4]]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 06:30:54