w*s 发帖数: 7227 | 1 比如一个数列【1,4,9,16,25】,
如何得到【3,5,7,9】?
谢谢! |
H****S 发帖数: 1359 | 2 def f(xs): return map (lambda (x, y) : y - x, zip (xs, xs[1:])) |
w*s 发帖数: 7227 | 3 尼玛,太牛了,老子完全看不懂
【在 H****S 的大作中提到】 : def f(xs): return map (lambda (x, y) : y - x, zip (xs, xs[1:]))
|
s******d 发帖数: 278 | 4 haskell haha
【在 H****S 的大作中提到】 : def f(xs): return map (lambda (x, y) : y - x, zip (xs, xs[1:]))
|
n****l 发帖数: 1739 | 5 really do not see the reason to use map at all.
[xs[i+1] - xs[i] for i in range(len(xs)-1)]
【在 w*s 的大作中提到】 : 尼玛,太牛了,老子完全看不懂
|
a****f 发帖数: 17 | 6 try numpy, numpy.diff([1,4,9,16,26])
【在 w*s 的大作中提到】 : 比如一个数列【1,4,9,16,25】, : 如何得到【3,5,7,9】? : 谢谢!
|
w*s 发帖数: 7227 | 7 zan !
【在 n****l 的大作中提到】 : really do not see the reason to use map at all. : [xs[i+1] - xs[i] for i in range(len(xs)-1)]
|
H****S 发帖数: 1359 | 8 list和本身的tail进行zip代表了一种非常有用的pattern,看下面的,
def f: Stream[Int] = 1 #:: 1 #:: (f.zip(f.tail).map(x => x._1 + x._2))
基本上你不可能找到比这个更简单清晰的fibonacci数列求法了。
【在 n****l 的大作中提到】 : really do not see the reason to use map at all. : [xs[i+1] - xs[i] for i in range(len(xs)-1)]
|
n******7 发帖数: 12463 | 9 你和他的答案是两种思路了
基于index的for循环任何一个学过C系语言的都熟悉,简单易懂
一招搞定所有问题,不变应万变
你这个应该是functional style的,我觉得很优美,“高”级
可以在比较粗的粒度上构思整个程序
但是需要时间来熟悉
你最后这个不是python吧?看着像scala
有没有什么资料详细讲解你说的这些pattern的?
我觉得很有意思,而且这种东西可以不限于特定的语言,值得花时间学习
【在 H****S 的大作中提到】 : list和本身的tail进行zip代表了一种非常有用的pattern,看下面的, : def f: Stream[Int] = 1 #:: 1 #:: (f.zip(f.tail).map(x => x._1 + x._2)) : 基本上你不可能找到比这个更简单清晰的fibonacci数列求法了。
|
b*******s 发帖数: 5216 | 10 这才是正解
【在 a****f 的大作中提到】 : try numpy, numpy.diff([1,4,9,16,26])
|
|
|
H****S 发帖数: 1359 | 11 functional programming in scala这本书上有大量这样的奇技淫巧。我另外一个比较
喜欢的是如何用foldr实现foldl。
【在 n******7 的大作中提到】 : 你和他的答案是两种思路了 : 基于index的for循环任何一个学过C系语言的都熟悉,简单易懂 : 一招搞定所有问题,不变应万变 : 你这个应该是functional style的,我觉得很优美,“高”级 : 可以在比较粗的粒度上构思整个程序 : 但是需要时间来熟悉 : 你最后这个不是python吧?看着像scala : 有没有什么资料详细讲解你说的这些pattern的? : 我觉得很有意思,而且这种东西可以不限于特定的语言,值得花时间学习
|
n******7 发帖数: 12463 | 12 谢谢
不过你把这叫做奇技淫巧,是不是你觉得大部分这类技巧都没有实用价值?
【在 H****S 的大作中提到】 : functional programming in scala这本书上有大量这样的奇技淫巧。我另外一个比较 : 喜欢的是如何用foldr实现foldl。
|
n******7 发帖数: 12463 | 13 2楼或者5楼的方案已经很简洁了
我觉得没有必要的话,还是透明的代码比较好,尽量不要产生dependence
有时候会有意想不到的问题,而且可能别人升级个版本你code就不work了
除非numpy的performance比你自己的实现好很多,或者主要的code都是基于numpy的
【在 b*******s 的大作中提到】 : 这才是正解
|
n*****t 发帖数: 22014 | 14 妈蛋,老邢这个 13 点不让我贴代码,服了
【在 w*s 的大作中提到】 : 比如一个数列【1,4,9,16,25】, : 如何得到【3,5,7,9】? : 谢谢!
|
l*********s 发帖数: 5409 | 15 这个是基本技能,不会这个连玩具都写不了。
【在 n******7 的大作中提到】 : 谢谢 : 不过你把这叫做奇技淫巧,是不是你觉得大部分这类技巧都没有实用价值?
|
H****S 发帖数: 1359 | 16 我觉得很有用,FP把大量看上去不同的问题用相同的规律紧紧粘合在一起,特别适用于
我这种脑容量有限的人。但是这儿大多数人都觉得FP没用,我又不想把这个帖子变成圣
战贴,所以自降身段得了。
【在 n******7 的大作中提到】 : 谢谢 : 不过你把这叫做奇技淫巧,是不是你觉得大部分这类技巧都没有实用价值?
|
P**H 发帖数: 1897 | 17 通常情况,numpy就是比自己的实现好。已经是Python做科学计算的标杆。
【在 n******7 的大作中提到】 : 2楼或者5楼的方案已经很简洁了 : 我觉得没有必要的话,还是透明的代码比较好,尽量不要产生dependence : 有时候会有意想不到的问题,而且可能别人升级个版本你code就不work了 : 除非numpy的performance比你自己的实现好很多,或者主要的code都是基于numpy的
|
s***o 发帖数: 2191 | 18 有点意思,我来个java版的
List result = IntStream.range(0, l.size() - 1)
.map(i -> l.get(i + 1) - l.get(i))
.boxed()
.collect(Collectors.toList()); |
s***o 发帖数: 2191 | 19 c# 版:
var result = l.Zip(l.Skip(1), (x, y) => y - x); |
H****S 发帖数: 1359 | 20 xs.sliding(2).map({case x :: y :: _ => y - x}).toList
【在 s***o 的大作中提到】 : c# 版: : var result = l.Zip(l.Skip(1), (x, y) => y - x);
|
|
|
n******7 发帖数: 12463 | 21 明白了 谢谢笑面男
【在 H****S 的大作中提到】 : 我觉得很有用,FP把大量看上去不同的问题用相同的规律紧紧粘合在一起,特别适用于 : 我这种脑容量有限的人。但是这儿大多数人都觉得FP没用,我又不想把这个帖子变成圣 : 战贴,所以自降身段得了。
|
n******7 发帖数: 12463 | 22 python科学计算当然用numpy这一套
我比较土,要是就算个差额
我还是愿意自己写,这种东西一般也不会是瓶颈
我看了一下diff的实现,
a = asanyarray(a)
nd = len(a.shape)
slice1 = [slice(None)]*nd
slice2 = [slice(None)]*nd
slice1[axis] = slice(1, None)
slice2[axis] = slice(None, -1)
slice1 = tuple(slice1)
slice2 = tuple(slice2)
if n > 1:
return diff(a[slice1]-a[slice2], n-1, axis=axis)
else:
return a[slice1]-a[slice2]
跟zip的思路比较像
【在 P**H 的大作中提到】 : 通常情况,numpy就是比自己的实现好。已经是Python做科学计算的标杆。
|
h*i 发帖数: 3446 | 23 Clojure:
(map - (next x) x)
这几乎就是本题字面意思的翻译。即使不懂Clojure的人也不能号称看不懂吧?这种题
,用FP要容易得多。
【在 w*s 的大作中提到】 : 比如一个数列【1,4,9,16,25】, : 如何得到【3,5,7,9】? : 谢谢!
|
h*i 发帖数: 3446 | 24 What a monstrosity. LOL.
【在 n******7 的大作中提到】 : python科学计算当然用numpy这一套 : 我比较土,要是就算个差额 : 我还是愿意自己写,这种东西一般也不会是瓶颈 : 我看了一下diff的实现, : a = asanyarray(a) : nd = len(a.shape) : slice1 = [slice(None)]*nd : slice2 = [slice(None)]*nd : slice1[axis] = slice(1, None) : slice2[axis] = slice(None, -1)
|