📌 下边代码为生成器版本的杨辉三角
            
            
              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。