【问题标题】:Unable to understand the lambda expression in python code无法理解 python 代码中的 lambda 表达式
【发布时间】:2019-08-28 11:37:54
【问题描述】:

您好,我对这个 python 代码有疑问:

def func():
    m=max(d1.values()
    return list(filter(lambda t: t[1]==max(d1.values()), d1.items()))[0][0]

这里它返回字典的最大值: dic={'a':1, 'b':2 ,'c':3}

我无法理解表达式:

list(filter(lambda t: t[1]==max(d1.values()), d1.items()))[0][0]    

请帮帮我,我是编程新手

谢谢!

【问题讨论】:

标签: python lambda expression


【解决方案1】:

过滤器函数返回第二个参数中的元素的迭代器,该函数(第一个参数)返回true(根据documentation)。第二个参数中的元素被一一传递给函数。

在您的情况下,lambda 正在检查 d1.items() 的传递元素是否等于该值列表中最大元素 max(d1.values()) 的值。

我希望这可以为您澄清。

【讨论】:

  • 感谢 mucio,您的解释是正确的,我理解,但我不明白这个表达,特别是 'lambda t=t[1]' 这是什么意思
  • lambda 仅表示匿名函数,除此之外您不会在其他任何地方调用该函数。 :前面的变量是函数的参数,后面是函数的返回值,你可以像def function(t): return t[1]==max(d1.values())一样读。让我知道这是否对您有所澄清,以防我将其添加到答案中。
  • 感谢您详细说明,但如果您能详细说明一下,我会很高兴,因为我对编程很陌生。
  • 好吧,那样的话我们应该找一个更好的频道,StackOverflow 不是为了这种基本的解释,因为你可以找到一本不错的 python 书或像 Tim Woocker 链接的那样的网站
【解决方案2】:

首先,从 dict 中查找最高值项目的代码 sn-p 应该如下所示

dic = {'a':1, 'b':2 ,'c':3}
reduce(lambda x,y: x if x[1] > y[1] else y, dic.iteritems())

解释:

lambda 之后的参数数量对于 filter 和 map 是一个,但对于 reduce 是 2 个。 所有过滤器、映射和归约都期望一个可迭代对象作为第二个参数传递

过滤器的一个例子是

list(filter(lambda x: x % 2 == 0, [1, 3, 4, 5, 6]))

这里迭代发生在列表 [1, 3, 4, 5, 6] 上,每次迭代都会将一个值传递给匿名 lambda 函数。在上述情况下,它是 x lambda 方法检查 x % 2 == 0,并返回 True/False。如果为真,则过滤获取该项目,否则避开该项目并形成另一个列表。在这种情况下,仅选择偶数值并去掉奇数值。

您可以了解更多关于 lambda 的信息以及您使用它们的这些功能。您可以从 w3school 或 hackerrank 或其他网站获取问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多