通过lambda函数替代

时间:2016-06-15 16:48:49

标签: python python-2.7 dictionary lambda

我必须创建一个带有列表的函数,并交替映射两个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

但不幸的是,这不正确。

1 个答案:

答案 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])