【问题标题】:Alternate through lambda functions通过 lambda 函数交替
【发布时间】:2016-06-15 16:48:49
【问题描述】:

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

但不幸的是,它不正确。

【问题讨论】:

    标签: python python-2.7 dictionary lambda


    【解决方案1】:

    这适用于任意数量的功能。

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

    您在其他地方的 cmets 中声明您需要一个使用 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])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-29
      • 1970-01-01
      • 2020-04-18
      • 2017-06-20
      相关资源
      最近更新 更多