四种写法,一个结果
一批金额 [120, 80, 200, 150],门槛 100:留下不低于门槛的,各乘 10,再加起来。这正是 l1_basic_11 里用循环做过的那条流水线。这条路线用过的四种写法,一次全跑:
A = [120, 80, 200, 150]
LINE = 100
from functools import reduce
def by_loop(xs, line):
t = 0
for a in xs:
if a >= line:
t = t + a * 10
return t
def by_hof(xs, line):
return sum(map(lambda a: a * 10, filter(lambda a: a >= line, xs)))
def by_reduce(xs, line):
return reduce(lambda acc, x: acc + x * 10 if x >= line else acc, xs, 0)
def by_comp(xs, line):
keep = lambda ys: [a for a in ys if a >= line]
x10 = lambda ys: [a * 10 for a in ys]
return sum(x10(keep(xs)))
print("/".join(str(f(A, LINE)) for f in (by_loop, by_hof, by_reduce, by_comp)))
全部评论