当前位置: 首页 > 知识库问答 >
问题:

使用“key”和lambda表达式的python max函数

西门展
2023-03-14
def winner():
    w = max(players, key=lambda p: p.totalScore)
    null

共有1个答案

赫连昕
2023-03-14

lambda是一个匿名函数,它相当于:

def func(p):
   return p.totalScore     

现在max变为:

max(players, key=func)

但是,由于def语句是复合语句,它们不能用于需要表达式的地方,所以有时会使用lambda

max(a,b,c,...[,key=func])->值

使用单个可迭代参数,返回其最大的项。对于两个或更多的参数,返回最大的参数。

因此,它只返回最大的对象。

一个简单的例子,假设您有一个字符串形式的数字列表,但您希望通过它们的整数值来比较那些项。

>>> lis = ['1', '100', '111', '2']

在这里,max使用项目的原始值对项目进行比较(字符串是按词典进行比较的,因此您将得到'2'作为输出):

>>> max(lis)
'2'

若要根据项目的整数值比较项目,请使用和一个简单的lambda:

>>> max(lis, key=lambda x:int(x))  # compare `int` version of each item
'111'

示例2:将max应用于元组列表。

>>> lis = [(1,'a'), (3,'c'), (4,'e'), (-1,'z')]

默认情况下,max将通过第一个索引比较项目。如果第一个索引相同,那么它将比较第二个索引。在我的示例中,所有项都有一个唯一的第一索引,因此您可以得到以下答案:

>>> max(lis)
(4, 'e')

但是,如果您想通过索引1处的值来比较每个项目,该怎么办呢?简单:使用lambda:

>>> max(lis, key = lambda x: x[1])
(-1, 'z')
lis = ['1','100','111','2', 2, 2.57]

在Python2中,可以比较两种不同类型的项:

>>> max(lis)  # works in Python 2
'2'
>>> max(lis, key=lambda x: int(x))  # compare integer version of each item
'111'

但在Python3中,您不能再这样做了:

>>> lis = ['1', '100', '111', '2', 2, 2.57]
>>> max(lis)
Traceback (most recent call last):
  File "<ipython-input-2-0ce0a02693e4>", line 1, in <module>
    max(lis)
TypeError: unorderable types: int() > str()

但这是可行的,因为我们正在比较每个对象的整数版本:

>>> max(lis, key=lambda x: int(x))  # or simply `max(lis, key=int)`
'111'
 类似资料:
  • 问题内容: 我来自OOP背景,尝试学习python。我使用的函数使用lambda表达式返回列表中具有最大类型的实例。 该函数正确地返回具有maximum类型的实例。我对以下三件事感到困惑: 该功能如何工作?它正在采取什么论点?我查看了文档,但听不懂。 max函数中关键字的用途是什么?我知道它也用于功能上下文 lambda表达式的含义?如何阅读它们?它们如何工作? 这些都是非常笨拙的概念性问题,但可

  • 问题内容: 如何使用带闭包的Java 8编写的方法支持以函数为参数并将函数返回为值的方法? 问题答案: 在Java Lambda API中,主要类是java.util.function.Function。 您可以以与其他所有引用相同的方式使用对该接口的引用:将其创建为变量,然后将其作为计算结果返回,依此类推。 这是一个非常简单的示例,可能会对您有所帮助: 如果需要传递多于1个参数,请看一下方法,但

  • 主要内容:作为参数使用Lambda表达式,访问变量,方法引用在《 Java Lambda表达式》和《 Java Lambda表达式的3种简写方式》一节中我们了解了 Java Lambda 的概念并可以在匿名类的场合使用 Lambda 语法进行简单替换。本节主要介绍在 Java 中如何使用 Lambda 表达式。 作为参数使用Lambda表达式 Lambda 表达式一种常见的用途就是作为参数传递给方法,这需要声明参数的类型声明为函数式接口类型。示例代码如下:

  • 对于定义一个简单的函数, Python 还提供了另外一种方法,即使用本节介绍的 lambda 表达式。 lambda 表达式,又称 匿名函数,常用来表示内部仅包含 1 行表达式的函数。如果一个函数的函数体仅有 1 行表达式,则该函数就可以用 lambda 表达式来代替。 lambda 表达式的语法格式如下: name = lambda [list] : 表达式 其中,定义 lambda 表达式,必

  • 匿名函数   在Go中函数也是值,程序中可以声明一个函数类型的变量,将函数作为参数传递。声明函数为值的变量(匿名函数:可赋值个变量,也可直接执行) pro04_1_2_1.go package main import ( "fmt" ) //求矩形的面积 func main() { myfun := func(x int, y int) int { retur

  • 问题内容: 我在Java 8映射操作中传递了一个Function,Intellij告诉我可以将其替换为lambda表达式。但是我不知道如何在不创建中间对象结构的情况下做到这一点。 这是我的工作: 我认为Intellij建议我这样做: 我不知道一种干净的方法来获取在匿名函数中检索到的objectType.getTempUrl()。getFullUrl()部分,有什么建议吗? 问题答案: 你总是可以写