【问题标题】:how to take a lambda function as an input如何将 lambda 函数作为输入
【发布时间】:2016-10-31 12:00:48
【问题描述】:

单独的函数接受一个函数和列表并返回两个列表,我的问题是如何将以下函数转换为 lambda 输入以使我的单独函数工作? (我的单独函数中的第一个输入不正确,它会引发语法错误)

def function(x:list):
    for y in x:
        if y > x[0]:
            return True
        else:
            return False

separate(lambda x: for y in x: y > x[0], l):

【问题讨论】:

  • 您能否提供一些单独函数的定义...到目前为止您在创建单独函数时尝试过什么?
  • 其实没关系,我的问题只是关于lambda函数。
  • 为什么不能使用separate(function(x))
  • 我只想将函数转换为输入的 lambda 函数,因为我的出现了语法错误。
  • 因为我不能定义另一个函数,这是必需的。

标签: python lambda


【解决方案1】:

如果可以使用map

separate(lambda x: map(lambda y : y > x[0], x))

返回一个地图对象

>>> 
>>> z = lambda x: map(lambda y : y > x[0], x)
>>> list(z([1,2,3]))
[False, True, True]
>>> list(z([10, 2, 3, 11, 9]))
[False, False, False, True, False]
>>>

outer lambda 将列表作为其输入 (x) 并返回 map 的结果。第二个 lambda 映射到 x 的元素上 - map 提供迭代。


或者只是使用列表推导

separate(lambda x: [y > x[0] for y in x])

>>> z = lambda x: [y > x[0] for y in x]
>>> list(z([10, 2, 3, 11, 9]))
[False, False, False, True, False]
>>> 

将列表解析解包为常规函数定义,以便与您帖子中的function 进行比较

def function(x:list):
    result = []
    for y in x:
        result.append(y > x[0])
    return result

【讨论】:

    【解决方案2】:

    这是一个采用 lambda 函数的示例函数。

    def myNewFilter(x, lst):
        return filter(x, lst)
    
    startingWithX = lambda x: x.startswith('X')
    
    lst = ['Xa', 'Xb', 'a', 'b']
    print myNewFilter(startingWithX, lst)
    

    输出:

    ['Xa', 'Xb']
    

    【讨论】:

    • 好的,但这并不能完全回答我的问题,因为我无法定义另一个函数。我只能将 lambda 函数定义为它在我的单独函数中显示的方式。
    • 你要么必须内联定义 lambda 函数,要么给它一个名字......这是仅有的两个选项......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多