2016-06-15 5 views
0

목록을 취하고 두 개의 람다 함수를 번갈아 매핑하는 함수를 만들어야합니다. 이 같은람다 함수를 통해 대체

>>> 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는 제 2 및 제 4 요소에 적용된다.

지금까지 나는이 있습니다

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]) 
관련 문제