这段 杨辉三角 的算法,真漂亮...

2015-06-17 14:42:56 +08:00
 Tiande

来源 (代码在评论中)

代码:

def triangles():
....a = [1];
....while True:
........yield a
........a = [sum(i) for i in zip([0] + a, a + [0])]

部分结果:

$ python python/pytest.py
[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]

真是爆za了 ;)

10208 次点击
所在节点    Python
45 条回复
ColorfulNight
2015-06-17 14:46:48 +08:00
我用C的队列写过,但是不知道为什么当行数一大就会出错
sinux
2015-06-17 14:52:33 +08:00
nice job
elvis_w
2015-06-17 15:09:37 +08:00
Python的生成器函数,不错
zerh925
2015-06-17 15:46:21 +08:00
之前看到使用yield生成fab数,从最简单的方法,到使用list存储,再到定义一个类的next()方法,最后再来一记yield,真是惊艳到了。
66beta
2015-06-17 15:49:16 +08:00
哼,格式不对,没对齐
est
2015-06-17 15:51:31 +08:00
pascal = map ([1,1]^) [0..]
take 5 pascal -- [[1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1]]

还是有更加高级的语言的描述能力能秒杀python的。
est
2015-06-17 15:54:32 +08:00
定义一个函数 fib 用来输入任意位的Fibonacci 数列

fib 0 = 0
fib 1 = 1
fib n = fib (n-1) + fib (n-2)
TimLang
2015-06-17 16:03:47 +08:00
看了下python的yield和ruby的yield完全不是一个意思啊。下面是Ruby代码,ruby不需要生成器。

```ruby
def pascal(n)
ar = [1]
while n > 1
ar.unshift(0).push(0) # tack a zero on both ends
yield ar = ar.each_cons(2).map{|a, b| a + b }
n=n-1
end
end
puts pascal(5){|row| p row}
···
codercai
2015-06-17 16:28:56 +08:00
graceful job!
Vlux
2015-06-17 16:38:15 +08:00
人生苦短。pythonic
some0ne
2015-06-17 16:41:47 +08:00
```ruby

triangles = Enumerator.new do |yielder|
a = [1]
loop do
yielder << a
a = ([0] + a).zip(a + [0]).map {|i| i.reduce(:+) }
end
end

triangles.take(10).each {|row| p row }

```

相同功能的ruby版
Tiande
2015-06-17 16:48:02 +08:00
@some0ne 连函数名都一样 hhh
Tiande
2015-06-17 16:49:06 +08:00
@est 这是啥语言
(已匍匐在石榴裙下)
some0ne
2015-06-17 16:58:18 +08:00
@dtdnqsb 变量名随便起,一样只不过是为了跟LZ的代码对应。你要是不喜欢,我改成 `杨辉三角.take(10)` 怎么样?
jsyangwenjie
2015-06-17 17:00:49 +08:00
这。。
你随便学一门函数式语言就写得出来的。。
est
2015-06-17 17:00:56 +08:00
@dtdnqsb 当然是我大Haskell 。
luciankaltz
2015-06-17 17:21:32 +08:00
Python弱鸡被惊艳到了。。。
Tiande
2015-06-17 17:58:18 +08:00
@some0ne 我是说 zip() 不是变量名 hhh
Tiande
2015-06-17 17:59:31 +08:00
@jsyangwenjie 你就随便拿顺手的语言写个如此简洁的,让大家活儿好好乐乐?
没有嘲讽的意思 -。-
Tiande
2015-06-17 17:59:58 +08:00
@est 好好好,立马去跪舔

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/199252

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX