scanl
に相当する Haskellと同等の python に組み込み関数があるかどうかを知りたいreduce
ですfoldl
。
これを行うもの:
Prelude> scanl (+) 0 [1 ..10]
[0,1,3,6,10,15,21,28,36,45,55]
問題はそれを実装する方法ではありません。私はすでに以下に示す 2 つの実装を持っています (ただし、よりエレガントな実装がある場合は、ここで自由に表示してください)。
最初の実装:
# Inefficient, uses reduce multiple times
def scanl(f, base, l):
ls = [l[0:i] for i in range(1, len(l) + 1)]
return [base] + [reduce(f, x, base) for x in ls]
print scanl(operator.add, 0, range(1, 11))
与えます:
[0, 1, 3, 6, 10, 15, 21, 28, 36, 45, 55]
2 番目の実装:
# Efficient, using an accumulator
def scanl2(f, base, l):
res = [base]
acc = base
for x in l:
acc = f(acc, x)
res += [acc]
return res
print scanl2(operator.add, 0, range(1, 11))
与えます:
[0, 1, 3, 6, 10, 15, 21, 28, 36, 45, 55]
ありがとうございました :)