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

Python普通for循环创建二维数组报错而列表推导式正常的原因

问题原因解释

第一段代码报错的核心逻辑

Python的列表属于动态可变容器,不会预先为未声明的索引分配空间,仅能对已经存在的索引位置执行赋值操作,不能直接给不存在的索引赋值。
你的第一段代码执行流程完全违反了这个规则:

  • 初始化时new = []是完全为空的列表,没有任何元素,此时访问new[i](哪怕i是0)都会直接触发索引越界错误,更不用说还要继续访问第二层的new[i][j]。
  • 就算你提前给new添加了3个空的子列表,内层子列表也依然是空的,直接执行new[i][j] = 0还是会因为内层子列表没有对应j的索引位置抛出越界错误。

如果要用普通for循环实现相同的二维数组创建效果,正确写法如下:

r = 3
c = 4
new = []
for i in range(r):
    # 先创建内层子列表,添加到外层列表
    temp = []
    for j in range(c):
        temp.append(0)
    new.append(temp)
print(new)

输出结果和列表推导式完全一致。

第二段列表推导式可以正常执行的原因

双层列表推导式的执行逻辑是:

  1. 外层每循环一次,先生成一个长度为c、所有元素都是0的内层列表
  2. 再把生成好的内层列表添加到外层列表中
    全程不存在访问未创建索引的操作,所有元素都是先创建再加入对应容器,因此可以正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 12:36:04