鱼C论坛

 找回密码
 立即注册
查看: 1146|回复: 5

[已解决]lambda表达式

[复制链接]
发表于 2020-9-15 09:17:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
>>> rows = [
    {'fname': 'Brian', 'lname': 'Jones', 'uid': 1003},
    {'fname': 'David', 'lname': 'Beazley', 'uid': 1002},
    {'fname': 'John', 'lname': 'Cleese', 'uid': 1001},
    {'fname': 'Big', 'lname': 'Jones', 'uid': 1004}
]
>>> rows_by_fname = sorted(rows, key=lambda r: r['fname'])
>>> print(rows_by_fname)
[{'fname': 'Big', 'lname': 'Jones', 'uid': 1004}, {'fname': 'Brian', 'lname': 'Jones', 'uid': 1003}, {'fname': 'David', 'lname': 'Beazley', 'uid': 1002}, {'fname': 'John', 'lname': 'Cleese', 'uid': 1001}]


(萌新)lambda的参数r我猜测是指代列表rows里的字典,我想不通的是列表里字典有四个,怎么一个r就能指代而不引发错误。
最佳答案
2020-9-15 10:26:30
sorted()是一个排序函数,它的第一个参数是一个需要排序的序列(列表,元组,字符串等等),他的key参数接受一个callable对象(可以调用的对象,可以理解成一个函数),把这个key参数所指定的函数作用于序列的每个元素(可以理解为把序列中的每个元素做为参数,来调用key参数所指定的函数),再用各自得到返回结果,做为排序的依据进行排序,可能说的啰嗦了点,多看几遍,应该能看的很明白吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-15 10:10:14 | 显示全部楼层
本帖最后由 sunrise085 于 2020-9-15 10:14 编辑

首先, sorted是个排序函数,第一个参数rows是需要排序的列表,第二个参数key是一个排序条件,key一般是取列表中元素的一个特征,可以用表达式给出,也可以用一个函数表示,这里使用的是一个匿名函数。

rows列表中每一个元素都是一个字典,而且字典的key都是一样的,分别为 'fname', 'lname', 'uid'。这个lambda取的是字典的key='fname',也就是将列表中的四个元素按照元素的 'fname' 进行排序。最终结果也可以看出来,排序结果是 Big Brian  David  John  

举个实际例子吧。
有四个学生,他们有自己的姓(fname),名字(lname)和学号(uid),老师给他们排队,然后需要给出排队规则吧,否则他们也不知道怎么排嘛。这里就让他们按照姓(fname)的先后顺序排队,排队的时候肯定需要吧每个人叫出来,看看他们的姓(fname) ,每个人都有自己的姓(fname)怎么会发生指代错误呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-9-15 10:14:35 | 显示全部楼层
sorted 语法:
sorted(iterable, key=None, reverse=False)  
参数说明:
iterable -- 可迭代对象。
key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。
返回值
返回重新排序的列表。

遍历列表里的字典是sorted干的。lambda只是处理每一个字典。
rows = [
    {'fname': 'Brian', 'lname': 'Jones', 'uid': 1003},
    {'fname': 'David', 'lname': 'Beazley', 'uid': 1002},
    {'fname': 'John', 'lname': 'Cleese', 'uid': 1001},
    {'fname': 'Big', 'lname': 'Jones', 'uid': 1004}
]
show=lambda r: r['fname']
for a in rows:
    print(show(a))
---------------------------
Brian
David
John
Big
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-15 10:17:34 | 显示全部楼层
lambda r: r['fname']

lambda可以理解为:
def niming(r):
    return r['fname']
匿名函数,就是为了代码更加简洁
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-15 10:26:30 | 显示全部楼层    本楼为最佳答案   
sorted()是一个排序函数,它的第一个参数是一个需要排序的序列(列表,元组,字符串等等),他的key参数接受一个callable对象(可以调用的对象,可以理解成一个函数),把这个key参数所指定的函数作用于序列的每个元素(可以理解为把序列中的每个元素做为参数,来调用key参数所指定的函数),再用各自得到返回结果,做为排序的依据进行排序,可能说的啰嗦了点,多看几遍,应该能看的很明白吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-15 11:03:04 | 显示全部楼层
挥舞乾坤 发表于 2020-9-15 10:26
sorted()是一个排序函数,它的第一个参数是一个需要排序的序列(列表,元组,字符串等等),他的key参数接 ...

谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-18 17:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表