2016-06-15 9 views
0

Ich muss eine Funktion machen, die eine Liste nimmt und zwei Lambda-Funktionen alternativ abbildet. Wie folgt aus:Alternate durch Lambda-Funktionen

>>> alternateMap(lambda x: x+1, lambda y: y+10, [1, 2, 3, 4]) 
[2, 12, 4, 14] 

So ist die erste Funktion lambda x: x+1 gilt für das erste Element und dem dritten Element, wobei die zweite Funktion lambda y: y+10 gilt für die zweite und vierte Element.

Bisher habe ich dies:

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 

Aber leider ist es nicht richtig.

Antwort

3

Dies funktioniert für eine beliebige Anzahl von Funktionen.

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

Sie an anderer Stelle in den Kommentaren erwähnt, dass Sie eine Version benötigen, die map verwendet. Hier gehts:

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