我必须创建一个带有列表的函数,并交替映射两个lambda函数。像这样:
>>> alternateMap(lambda x: x+1, lambda y: y+10, [1, 2, 3, 4])
[2, 12, 4, 14]
因此,第一个函数lambda x: x+1
适用于第一个元素和第三个元素,第二个函数lambda y: y+10
适用于第二个和第四个元素。
到目前为止,我有这个:
def alternateMap(function1, function2, l):
for i in l:
a = map(function1, l)
i += 2
for n in l[1:]:
a = map(function2, l)
i += 2
return a
但不幸的是,这不正确。
答案 0 :(得分:3)
这适用于任何数量的功能。
>>> from itertools import cycle
>>> func_cycle = cycle([lambda x:x+1, lambda y:y+10])
>>> [next(func_cycle)(item) for item in [1, 2, 3, 4]]
[2, 12, 4, 14]
您在其他地方的评论中表示您需要使用map
的版本。你走了:
import itertools
class callable_cycle(itertools.cycle):
def __call__(self, *args, **kwds):
return next(self)(*args, **kwds)
func_cycle = callable_cycle([lambda x:x+1, lambda y:y+10])
map(func_cycle, [1, 2, 3, 4])