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

使用列表推导式生成帕斯卡三角时遭遇索引越界问题求助

帕斯卡三角列表推导式的索引越界问题修复

错误根源

  • 列表推导式执行逻辑问题:你写的嵌套列表推导式会一次性计算所有行,但在计算过程中a还没完成赋值——比如计算第1行时,a还是空列表,访问a[i-1]自然触发索引越界。
  • 条件判断完全错误:帕斯卡三角每一行的首尾元素都是1,中间元素是上一行相邻两元素之和,但你的条件j > 0 and j < n-1基于总行数而非当前行长度,完全不符合规则。
  • 第一行初始化错误:当i=0时,range(i)是空序列,生成的第一行是空列表,而帕斯卡三角的第一行应该是[1]。

修复方案

方案1:循环逐行生成(直观易维护)

n = int(input())
a = []
for i in range(n):
    # 初始化当前行为全1,长度为i+1(第0行1个元素,第1行2个,以此类推)
    row = [1] * (i + 1)
    # 只修改中间元素(从第1个到倒数第2个)
    for j in range(1, i):
        row[j] = a[i-1][j] + a[i-1][j-1]
    a.append(row)
print(*a, sep='\n')

方案2:修正后的列表推导式

n = int(input())
# 先初始化第一行
a = [[1]]
# 用列表推导式生成后续行,每行首尾为1,中间元素用上一行计算
a += [[1] + [a[i-1][j] + a[i-1][j-1] for j in range(1, i)] + [1] for i in range(1, n)]
print(*a, sep='\n')

说明

  • 方案1通过分步生成每行,先初始化全1再修改中间值,逻辑清晰,调试起来更方便。
  • 方案2先固定第一行,后续行的生成依赖已经存在的前一行,避免了原代码中提前访问未生成元素的问题,同时保留了列表推导式的写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 05:25:13