2016-06-15 54 views
0

我必須製作一個函數,它接受一個列表並將兩個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 

但不幸的是這是不正確的。

回答

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