用Python三行代码玩转杨辉三角的N种变形杨辉三角这个古老的数学瑰宝在编程初学者的世界里常常沦为打印图形的练习题。但今天我们要用Python彻底打破这种刻板印象——只需三行核心代码就能生成标准杨辉三角并在此基础上实现倒三角、左对齐、素数高亮等十余种高级变形。这种极致简洁的实现方式正是Python函数式编程魅力的完美体现。1. 杨辉三角的数学本质与Python实现杨辉三角的每个数字都等于它上方两数之和这个性质可以用递推公式表示为C(n, k) C(n-1, k-1) C(n-1, k)传统C语言实现需要手动管理二维数组和内存分配int a[n][n]; for(int i0;in;i) { a[i][0] a[i][i] 1; for(int j1;ji;j) a[i][j] a[i-1][j] a[i-1][j-1]; }而Python可以用生成器表达式和zip巧妙实现def yanghui(n): row [1] for _ in range(n): yield row row [x y for x,y in zip([0]row, row[0])]关键突破点zip([0]row, row[0])创造错位相加效果生成器避免内存预分配列表推导式取代嵌套循环2. 基础变形从倒三角到镜像对称2.1 倒置输出只需反转生成器结果list(yanghui(5))[::-1] # 倒序输出输出效果[1, 4, 6, 4, 1] [1, 3, 3, 1] [1, 2, 1] [1, 1] [1]2.2 左对齐版调整打印格式for row in yanghui(5): print( .join(map(str, row)).ljust(20))输出效果1 1 1 1 2 1 1 3 3 1 1 4 6 4 12.3 镜像对称版利用字符串操作for row in yanghui(5): s .join(map(str, row)) print(s s[-2::-1])3. 高级玩法数学特性可视化3.1 素数高亮显示标记所有素数def is_prime(n): return n 1 and all(n % i for i in range(2, int(n**0.5)1)) for row in yanghui(10): print( .join( f\033[31m{n}\033[0m if is_prime(n) else str(n) for n in row ))3.2 斐波那契数列提取斜对角线求和fib [] for i, row in enumerate(yanghui(10)): fib.append(row[i//2] if i%2 else row[i//2]) print(fib) # [1, 1, 2, 3, 5, 8...]3.3 组合数计算器直接查询特定位置def C(n, k): return list(yanghui(n1))[-1][k] print(C(5, 2)) # 输出104. 性能优化与工业级实现4.1 记忆化递归版避免重复计算from functools import lru_cache lru_cache(maxsizeNone) def comb(n, k): return 1 if k in (0, n) else comb(n-1, k) comb(n-1, k-1)4.2 对称性优化只计算前半部分def optimized_yanghui(n): row [1] for _ in range(n): yield row row[-2::-1] row [x y for x,y in zip([0]row[:len(row)//21], row)]4.3 生成器管道支持流式处理import itertools def infinite_yanghui(): row [1] while True: yield row row [x y for x,y in zip([0]row, row[0])] # 取前10行奇数行 rows itertools.islice(infinite_yanghui(), 0, 10, 2)5. 实用工具函数集锦5.1 格式化打印器def print_yanghui(n, width4): for i, row in enumerate(yanghui(n)): print( * width*(n-i) .join(f{num:^{width}d} for num in row))5.2 LaTeX输出def latex_yanghui(n): print(r\begin{array}{ c*(n1) }) for row in yanghui(n): print( .join(map(str, row)) r\\) print(r\end{array})5.3 HTML可视化def html_yanghui(n): print(div styletext-align:center) for row in yanghui(n): print(div .join(fspan stylemargin:10px{n}/span for n in row) /div) print(/div)在数据分析项目中我常用杨辉三角生成器快速验证组合数学假设。比如最近需要测试一个概率模型时直接用yanghui(100)生成的行数据作为测试用例比手动构造数组效率提升了数十倍。这种将数学工具产品化的思路正是Python在科学计算领域的独特优势。