为什么在以下列表理解中print(x)这里不是有效的(SyntaxError)?
my_list=[1,2,3]
[print(my_item) for my_item in my_list]
Run Code Online (Sandbox Code Playgroud)
为了对比 - 以下不会给出语法错误:
def my_func(x):
print(x)
[my_func(my_item) for my_item in my_list]
Run Code Online (Sandbox Code Playgroud) 我想知道python中是否有内置函数用于等效的Haskell scanl,reduce相当于foldl.
这样做的东西:
Prelude> scanl (+) 0 [1 ..10]
[0,1,3,6,10,15,21,28,36,45,55]
Run Code Online (Sandbox Code Playgroud)
问题不在于如何实现它,我已经有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))
Run Code Online (Sandbox Code Playgroud)
得到:
[0, 1, 3, 6, 10, 15, 21, 28, 36, 45, 55]
Run Code Online (Sandbox Code Playgroud)
第二次实施:
# Efficient, using an accumulator
def scanl2(f, base, l):
res = [base]
acc = base …Run Code Online (Sandbox Code Playgroud) Seq.scan()在Python中是否有类似F#的函数?
我想在没有循环的情况下做一些cumsum()或者cumproduct()某种事情.