生成一个列表列表(或打印,我不介意)一个大小为 N 的帕斯卡三角形,代码行数尽可能少!
这是我的尝试(python 2.6中的 118 个字符使用技巧):
c,z,k=locals,[0],'_[1]'
p=lambda n:[len(c()[k])and map(sum,zip(z+c()[k][-1],c()[k][-1]+z))or[1]for _ in range(n)]
解释:
- 列表理解的第一个元素(当长度为 0 时)是
[1]
- 下一个元素通过以下方式获得:
- 取上一个列表并制作两个列表,一个在开头填充 0,另一个在末尾填充。
- 例如,对于第二步,我们采取
[1]
并制作[0,1]
和[1,0]
- 例如,对于第二步,我们采取
- 将两个新列表逐个元素相加
- 例如,我们创建一个新列表
[(0,1),(1,0)]
并使用 sum 进行映射。
- 例如,我们创建一个新列表
- 重复n次,仅此而已。
用法(漂亮的印刷,实际上是在代码高尔夫 xD 之外):
result = p(10)
lines = [" ".join(map(str, x)) for x in result]
for i in lines:
print i.center(max(map(len, lines)))
输出:
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