GVKun编程网logo

使用'key'和lambda表达式的python max函数(key=lambda函数python)

24

针对使用'key'和lambda表达式的pythonmax函数和key=lambda函数python这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展PythonLambda表达式、Pytho

针对使用'key'和lambda表达式的python max函数key=lambda函数python这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展Python Lambda表达式、Python lambda表达式与filter()函数,map()活用、python lambda表达式的两种用处、Python lambda表达式简单用法等相关知识,希望可以帮助到你。

本文目录一览:

使用'key'和lambda表达式的python max函数(key=lambda函数python)

使用'key'和lambda表达式的python max函数(key=lambda函数python)

我来自OOP背景,尝试学习python。我使用的max函数使用lambda表达式返回列表中Player具有最大类型的实例。totalScore``players

def winner():    w = max(players, key=lambda p: p.totalScore)

该函数正确地返回Player具有maximum类型的实例totalScore。我对以下三件事感到困惑:

  1. max功能如何工作?它正在采取什么论点?我查看了文档,但听不懂。
  2. keymax函数中关键字的用途是什么?我知道它也用于sort功能上下文
  3. lambda表达式的含义?如何阅读它们?它们如何工作?

这些都是非常笨拙的概念性问题,但可以帮助我理解语言。如果您可以提供示例进行解释,这将有所帮助。谢谢

答案1

小编典典

lambda 是一个匿名函数,它等效于:

def func(p):   return p.totalScore

现在max变成:

max(players, key=func)

但是由于def语句是复合语句,因此不能在需要表达式的地方使用它们,这就是有时lambda使用的原因。

请注意,这lambda等效于您在的return语句中输入的内容def。因此,您不能在内使用语句lambda,仅允许使用表达式。


怎么max办?

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

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

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


key 工作如何?

在Python
2中,默认情况下key根据对象的类型根据一组规则比较项目(例如,字符串始终大于整数)。

要在比较之前修改对象,或基于特定的属性/索引进行比较,必须使用key参数。

范例1:

一个简单的示例,假设您有一个字符串形式的数字列表,但是您想按其整数值比较这些项目。

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

这里max使用它们的原始值比较项目(按字母顺序比较字符串,这样您就可以得到''2''输出):

>>> max(lis)''2''

要通过整数比较项目,请使用key简单的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]

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

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

但是在Python 3中,您不能再这样做了:

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

Python Lambda表达式

Python Lambda表达式

简介
Lambda函数是一个小的匿名函数。Lambda函数可以接受任意数量的参数,但只能具有一个表达式。
1、语法

lambda arguments : expression

执行该表达式并返回结果:

例如

在参数a上添加10,然后返回结果:

x = lambda a : a + 10
print(x(5))

Lambda函数可以接受任意数量的参数:

例如

将参数a与参数b相乘,并返回结果:

x = lambda a, b : a * b
print(x(5, 6))

例如

汇总参数abc并返回结果:

x = lambda a, b, c : a + b + c
print(x(5, 6, 2))

2、使用Lambda函数的好处
将lambda用作另一个函数中的匿名函数时,可以更好地使用lambda函数。

假设有一个接受一个参数的函数定义,该参数将与一个未知数相乘:

def myfunc(n):
    return lambda a : a * n

使用该函数定义可创建一个始终使您发送的数字翻倍的函数:

例如

def myfunc(n):
    return lambda a : a * n

mydoubler = myfunc(2)

print(mydoubler(11))

或者,使用相同的函数定义,使一个函数总是三倍的数字你发送:

例如

def myfunc(n):
    return lambda a : a * n

mytripler = myfunc(3)

print(mytripler(11))

或者,在同一程序中使用相同的函数定义来创建两个函数:

例如

def myfunc(n):
    return lambda a : a * n

mydoubler = myfunc(2)
mytripler = myfunc(3)

print(mydoubler(11))
print(mytripler(11))

了解更多分析及数据抓取可查看:
http://cloud.yisurvey.com:9081/html/bfd0c1a1-ea90-4ed6-9a2c-1da4cd72391c.html
本文转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请联系我们删除处理。
特别说明:本文旨在技术交流,请勿将涉及的技术用于非法用途,否则一切后果自负。如果您觉得我们侵犯了您的合法权益,请联系我们予以处理。

Python lambda表达式与filter()函数,map()活用

Python lambda表达式与filter()函数,map()活用

1.与filter(),配合使用:

In [1]: list(filter(lambda x:True if x % 3 == 0 else False, range(100)))
Out[1]:
[0,
 3,
 6,
 9,
 12,
 15,
......
 93,
 96,
 99]
#lambda x:True if x % 3 == 0 else False ,True if x % 3 == 0 else False是三元表达式

相当于如下:
def func(x):
if x%3 == 0:
return True
else:
return False

2.map():映射,用法和filter()类似,也是将序列放入函数进行运算,但是,不论运算结果为什么,map()都将忠实反馈,这是map()和filter()的主要区别。请注意,filter()和map()中的function都必要有一个返回值。

>>> list(map(lambda x:True if x % 3 == 0 else False, range(100)))
[True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True]

3.

zip():字面意思理解,就是zip打包,可以将多个序列进行打包,它会将序列拆分,然后把第一个序列和第二个序列的元素依次组成元组,2个一组组合成列表。

    不过要注意的是,这是以最短序列来组合的,就是说如果一个序列比较长,一个比较短的话,组合只会进行到断序列的最后一个元素,多余的部分会被抛弃。

1 >>> str1 = "abcde"
2 >>> str2 = "abcdefg"
3 >>> list(zip(str1, str2))
4 [(''a'', ''a''), (''b'', ''b''), (''c'', ''c''), (''d'', ''d''), (''e'', ''e'')]

 

python lambda表达式的两种用处

python lambda表达式的两种用处

1 用处1定义匿名函数

  不带参数的:

  a = lambda : print("123")

  带参数的

  b = lambda x, y:x * y

 2 当函数作为参数时,直接为该函数传参。

def func1(m, n):
    return str(m + n)


def func2(func):
    print("结果:" + func())

# 调用func2这种函数时,一般情况下,无法直接为作为参数的函数传参,
# func2(func1(4,5))        #这样是不行的

#但是用lambda表达式是可以的!
func2(lambda :func1(3,4))   # 结果:7

 

Python lambda表达式简单用法

Python lambda表达式简单用法

匿名函数

一.创建

python 使用 lambda 来创建匿名函数。

所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数。

  • lambda 只是一个表达式,函数体比 def 简单很多。
  • lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
  • lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
  • 虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。

语法

lambda 函数的语法只包含一个语句,如下:

lambda [arg1 [,arg2,.....argn]]:expression

如下实例:

#!/usr/bin/python3
 
# 可写函数说明
sum = lambda arg1, arg2: arg1 + arg2
 
# 调用sum函数
print ("相加后的值为 : ", sum( 10, 20 ))
print ("相加后的值为 : ", sum( 20, 20 ))


# 执行结果

相加后的值为 :  30
相加后的值为 :  40

条件运算时,对于简单的 if else 语句,可以使用三元运算来表示,即:

# 普通条件语句
if 1 == 1:
    name = ''wupeiqi''
else:
    name = ''alex''
  
# 三元运算
name = ''wupeiqi'' if 1 == 1 else ''alex''

对于简单的函数,也存在一种简便的表示方式,即:lambda表达式

# ###################### 普通函数 ######################
# 定义函数(普通方式)
def func(arg):
    return arg + 1
  
# 执行函数
result = func(123)
  
# ###################### lambda ######################
  
# 定义函数(lambda表达式)
my_lambda = lambda arg : arg + 1
  
# 执行函数
result = my_lambda(123)

lambda存在意义就是对简单函数的简洁表示

二.内置函数 

一、map

遍历序列,对序列中每个元素进行操作,最终获取新的序列。

li = [11, 22, 33]

new_list = map(lambda a: a + 100, li)
for i in new_list:
    print(i)
li = [11, 22, 33]
sl = [1, 2, 3]
new_list = map(lambda a, b: a + b, li, sl)

二、filter

对于序列中的元素进行筛选,最终获取符合条件的序列

li = [11, 22, 33]

new_list = filter(lambda arg: arg > 22, li)

#filter第一个参数为空,将获取原来序列

三、reduce

对于序列内所有元素进行累计操作

 

li = [11, 22, 33]

result = reduce(lambda arg1, arg2: arg1 + arg2, li)

# reduce的第一个参数,函数必须要有两个参数
# reduce的第二个参数,要循环的序列
# reduce的第三个参数,初始值

 

关于使用'key'和lambda表达式的python max函数key=lambda函数python的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Python Lambda表达式、Python lambda表达式与filter()函数,map()活用、python lambda表达式的两种用处、Python lambda表达式简单用法等相关知识的信息别忘了在本站进行查找喔。

本文标签: