Эквивалент Haskell Scanl в Python

Я хотел бы знать, есть ли встроенная функция в Python для эквивалентного Haskellscanl, как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]

Вторая реализация:

 # 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]

Спасибо :)

Ответы на вопрос(3)

Ваш ответ на вопрос