【问题标题】:How to convert a lambda function to a key argument for the max() function? [closed]如何将 lambda 函数转换为 max() 函数的关键参数? [关闭]
【发布时间】:2018-03-28 17:26:53
【问题描述】:

我正在尝试将普通函数中的 lambda 函数转换为将其用作键,但我无法理解。

def most_appear(name_list):
     return max(name_list, key=lambda x: name_list.count(x))

这个 lambda 是如何工作的? 如何创建一个函数来用作键?

【问题讨论】:

  • 这是一种查找列表中最常见元素的糟糕方法。它是 O(n^2) (或者准确地说,它需要在输入列表的大小上进行多次元素比较)。使用collections.Counter
  • 如果你知道如何创建一个函数,那么你可以将它作为键传递。就那么简单。还是您的问题有所不同?

标签: python python-3.x lambda key max


【解决方案1】:

这只是更方便的语法:

def func(x):
    return name_list.count(x)

然后

... max(..., key=func)

【讨论】:

  • 我有点不情愿地对此表示赞同,因为它确实回答了这个问题。
【解决方案2】:

此函数计算每个元素的数量并返回具有最多元素的元素。 lambda 不是必需的,因为 name_list.count 已经是一个函数:

def most_appear(name_list):
     return max(name_list, key=name_list.count)

【讨论】:

  • 高度 Pythonic?起初我是这么想的,但后来意识到它仍然将count (O(n)) 方法应用于每个元素。假设列表有一百万个元素。对于列表中的每个值,您以与 OP 相同的方式迭代列表。
【解决方案3】:

在这种情况下,如果你有两个函数参数,你可以使用偏函数

from functools import partial
def replace_lambda(lst, item):
    return lst.count(item)

def most_appear(name_list):
     func = partial(replace_lambda, name_list)
     return max(name_list,key=func )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-26
    • 2020-03-27
    • 2016-03-26
    • 2021-02-15
    • 1970-01-01
    • 2020-10-17
    • 1970-01-01
    相关资源
    最近更新 更多