生成器版本的杨辉三角

📌 下边代码为生成器版本的杨辉三角

python 复制代码
def triangles():
    row = [1]
    while True:
        yield row
        row = [1] + [row[i - 1] + row[i] for i in range(1, len(row))] + [1]

n = 0
results = []
for t in triangles():
    results.append(t)
    n += 1
    if n == 10:
        break

for t in results:
    print(t)

🔍 核心函数解释:triangles()

第一行初始化:

python 复制代码
row = [1]

设置杨辉三角的第一行。

无限生成:

python 复制代码
while True:
    yield row

使用生成器 yield,每次返回当前行 row

更新下一行:

python 复制代码
row = [1] + [row[i - 1] + row[i] for i in range(1, len(row))] + [1]

该行生成下一行杨辉三角,具体包括:

  • 开头加 1
  • 中间是相邻元素相加形成的新列表
  • 结尾加 1

✨ 重点解析:中间部分 [row[i - 1] + row[i] for i in range(1, len(row))]

这是杨辉三角中间项的生成规则。

  • 遍历 i 从 1 到 len(row) - 1
  • 每次将相邻两个数相加:row[i - 1] + row[i]

示例:

假设 row = [1, 3, 3, 1]

python 复制代码
中间部分计算如下:
i = 1: 1+3 = 4
i = 2: 3+3 = 6
i = 3: 3+1 = 4

结果为:[4, 6, 4]

下一行变为:

python 复制代码
[1] + [4, 6, 4] + [1] → [1, 4, 6, 4, 1]

🤔 为什么第二次输出是 [1, 1]

第一次生成的是:

python 复制代码
row = [1]

进入更新逻辑:

python 复制代码
[row[i - 1] + row[i] for i in range(1, len(row))]

此时 len(row) = 1,所以:

python 复制代码
range(1, 1) → 空序列 → [](中间部分为空)

最终:

python 复制代码
row = [1] + [] + [1] = [1, 1]

因此第二次打印是:

python 复制代码
[1, 1]

✅ 结果回顾(前 10 行)

csharp 复制代码
[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]
[1, 5, 10, 10, 5, 1]
[1, 6, 15, 20, 15, 6, 1]
[1, 7, 21, 35, 35, 21, 7, 1]
[1, 8, 28, 56, 70, 56, 28, 8, 1]
[1, 9, 36, 84, 126, 126, 84, 36, 9, 1]

📚 小结

  • range(1, len(row)) 是为了获取所有 相邻元素组合
  • row 只有一个元素时,中间列表为空,因此生成 [1, 1]
  • 该生成器用 yield 无限生成杨辉三角的每一行,直到外部主动 break
相关推荐
2601_9628517427 分钟前
计算机毕业设计之基于YOLOV10的低光照目标检测算法研究与实现
大数据·算法·yolo·目标检测·信息可视化·cnn·课程设计
magicwt30 分钟前
快手自动出价论文GAVE阅读笔记
算法
智者知已应修善业38 分钟前
【P12159蓝桥杯数组翻转】2025-4-24
c语言·c++·经验分享·笔记·算法·蓝桥杯
小巧的砖头1 小时前
使用SVN+CruiseControl+ANT实现持续集成之一
学习·算法
人道领域1 小时前
【LeetCode刷题日记】贪心算法理论与实战:455.分发饼干最优解
java·开发语言·数据结构·算法·leetcode·贪心算法
小O的算法实验室2 小时前
2026年ACM TCH,动态救护车路径优化:结合 K-means 聚类与多目标粒子群算法两阶段策略
算法
在书中成长2 小时前
HarmonyOS 小游戏《对战五子棋》开发第8篇 - GomokuEngine核心引擎设计(三):五子连珠判定算法
算法·华为·harmonyos
Let's Chat Coding2 小时前
MAC 消息认证码:同时验证来源和完整性
算法·哈希算法
cc.ChenLy4 小时前
算法从入门到精通实战指南
算法
Jerry11 小时前
LeetCode 160. 相交链表
算法