2016-06-15 12 views
0

リストを取り、2つのラムダ関数を交互にマップする関数を作る必要があります。このように:ラムダ関数の代わりに

>>> 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]) 
関連する問題