Comment detail
隣り合う二項の差 (Nested Flatten)言語をPythonに変更しておきました。
ついでなので少しつっこむと、この方法は2回のスライシングで2回コピーを行うのでxsが長いときには非効率ですね。
Pythonのzipは一番短いものにあわせるて長いものを切り捨てるのでzip(xs, xs[1:])で問題ないです。それでも1回コピーが起きるわけですが。
#2396 oceanさんの方法はコピーが起きません。下のコードはそれをさらにジェネレータにしたバージョンです。
1 2 3 | def diff(xs):
for i in range(1, len(xs)):
yield xs[i] - xs[i - 1]
|
スライスもそうだけど zip も非効率といえば非効率ですね。 というわけで itertools & generator expression で。
1 2 3 4 5 6 7 8 9 10 11 | from itertools import izip, islice
def tail(xs):
return islice(xs, 1, len(xs))
def diff(xs):
"""
>>> diff([3, 1, 4, 1, 5, 9, 2, 6, 5])
[-2, 3, -3, 4, 4, -7, 4, -1]
"""
return (x - y for x, y in izip(tail(xs), xs))
|





mono #2420() [ Python ] Rating0/0=0.00
Rating0/0=0.00-0+
1 reply [ reply ]