用尽可能少的代码生成大小为N的 Pascal三角形 的列表(或者打印,我不介意!)
这是我用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,另一个在末尾填充0。
- 例如,对于第二步,我们取
[1]
并创建[0,1]
和[1,0]
- 例如,对于第二步,我们取
- 逐个元素将两个新列表相加
- 例如,我们创建一个新列表
[(0,1),(1,0)]
并使用sum映射。
- 例如,我们创建一个新列表
- 重复n次,完成。
用法(带漂亮打印,实际上是出自Code Golf):
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