【发布时间】:2016-11-26 19:21:51
【问题描述】:
我在 mooc 中有一个作业,我必须编写一个函数来返回输入列表的累积和、累积乘积、最大值和最小值。
这部分课程是关于函数式编程的,所以我想全力以赴,即使我可以使用其他方式。
所以我尝试了这个:
from operator import mul
from itertools import repeat
from functools import reduce
def reduce2(l):
print(l)
return reduce(*l)
def numbers(l):
return tuple(map(reduce2, zip([sum, mul,min, max], repeat(l,4))))
l=[1,2,3,4,5]
numbers(l)
我的问题是它不起作用。如果我在 map 中使用它,zip 只会传递一个对象来减少它,并且解压缩 zip 将产生 (函数和参数列表 l) 的 4 个元组,所以我为此定义了 reduce2,我想解压缩其中的 zip,但是它没用。
Python 返回一个 TypeError: int' object is not iterable
我以为我可以在reduce2中使用return reduce(l[0],l[1]),但仍然存在相同的错误。
我不明白这里 python 的行为。
如果我只使用return reduce(l),它会再次返回一个TypeError:reduce expected at least 2 arguments, got 1
这里发生了什么?我怎样才能让它工作? 感谢您的帮助。
【问题讨论】:
标签: python dictionary zip reduce iterable-unpacking