针对使用'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)
- Python Lambda表达式
- Python lambda表达式与filter()函数,map()活用
- python lambda表达式的两种用处
- Python lambda表达式简单用法
使用'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
。我对以下三件事感到困惑:
- 该
max
功能如何工作?它正在采取什么论点?我查看了文档,但听不懂。 key
max函数中关键字的用途是什么?我知道它也用于sort
功能上下文- 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表达式
简介:
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))
例如:
汇总参数a
,b
和c
并返回结果:
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()活用
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表达式的两种用处
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 来创建匿名函数。
所谓匿名,意即不再使用 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表达式简单用法等相关知识的信息别忘了在本站进行查找喔。
本文标签: