领取MOLI红包

python之lambda表达式与sort函数中的key用法

发布日期:2025-01-03 19:21    点击次数:109

python lambda表达式与sort函数中的key lambda表达式 lambda 表达式常用来声明匿名函数,也就是没有函数名字的、临时使用的小函数,常用在临时需要一个类似于函数的功能但又不想定义函数的场合。 例如,内置函数sorted()和列表方法sort()的 key参数,内置函数map()和filter()的第一个参数等。当然,也可以使用lambda表达式定义具名函数。 lambda表达式只可以包含一个表达式,不允许包含复杂语句和结构,但在表达式中可以调用其他函数,该表达式的计算结果相当于函数的返回值。 下面的代码演示了不同情况下 lambda表达式的应用。 简言之: lambda表达式就是函数的迷你版,如果定义的函数比较简单可以使用lambda代替。 咳咳,我说一下map函数,真的太顶了。它有两个参数嘛,第二个参数是一个可迭代对象,列表,元组,字符串,集合,字典那些,第一个参数一般就是一个功能函数来的,map函数大概就是,将迭代对象里面的每一个元素都传那个功能函数进行处理,以上面例子为例,将字符串s里面的每一个小写元素通过lambda表达式函数转换为大写,存到map对象里面,如果要看结果的话要用list,tuple这些数据类型将其强制转换出来显示,不然看不到。 sort函数 最后就是经典的与sort函数搭配了。 假设有一个二维列表,我们以第二维元素值的大小对列表进行排序。 那么他的写法应该是这样的。 或许有些读者跟我刚才一样,知道这样写,但不知道怎么来的。于是我特地找了一些资料,大概的用法就是如果指定key的话就会先遍历一遍可迭代对象,得到每个元素的key值,然后根据这个key值进行排序。 相当于 for i in a,然后指定对i的某种操作,当然,要写成函数的形式才行。 如果写成一般函数的话是这种形式。 当我们大概知道了这个sort如何排序之后,其他多骚的写法都能写得出来,现在我们就试试。 骚写法写得出来,简单的写法就迎刃而解了。当然,使用lambda表达式前提是你对排序的定义足够简单,就是按哪个哪个排序的。复杂一点的话就要像上面一样自定义函数了。 下面看一下使用lambda对字典以值(值噢,而不是键)进行排序。 python匿名函数lambda表达式与sort()、sorted()、min()、max()、map()、reduce()、filter()使用 1. 什么是匿名函数 匿名函数,即没有函数名称的函数。学过Python的都知道,Python中函数的定义格式为:(关键字)def(加)(函数名)get_name:(函数体),但是匿名函数没有函数名称,它的定义格式为:lambda [arg1,[arg2,arg3…]]: expression,因此匿名函数又被成为lambda表达式,它只包含一行表达式。 2. lambda表达式 定义格式:lambda [arg1,[arg2,arg3…]]: expression,其中lambda为必须的关键字,args表示参数列表,expression表示表达式。 为便于理解,该语法格式转为普通函数格式如下: 显然,使用普通方法定义此函数,需要 3 行代码,而使用 lambda 表达式仅需 1 行。 举个例子: 运行结果 25 25 3. lambda表达式的用途 lambda表达式只有一行,相比于函数,它具有的优势: 对于单行函数,使用 lambda 表达式可以省去定义函数的过程,让代码更加简洁;对于不需要多次复用的函数,使用 lambda 表达式可以在用完之后立即释放,提高程序执行的性能。 那么,lambda表达式的使用方式有哪些呢: 1.排序,结合sorted() 和sort()方法使用 输出结果: [0, 1, 2, 3, 4, 5, 6, 9][[‘小帅’, 18], [‘大美’, 22], [‘小明’, 23], [‘张三’, 24]][‘3’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘10’, ‘10’, ‘J’, ‘Q’, ‘K’, ‘A’] 2.结合max()、min()使用 输出结果: 10[‘小帅’, 18] 3.结合map()函数使用 输出结果: [4, 9, 36, 1, 25][4, 9, 36, 1, 25][3, 5, 40, 7] 4.结合reduce()使用 reduce函数是Python中的内置函数,用于计算可迭代对象的累积结果。 reduce 函数的用法和示例: 函数定义:对可迭代对象中的元素进行累积操作,返回一个单一的结果。参数 function:用于累积操作的函数,接受两个参数,必须返回一个值。参数 iterable:可迭代对象,包含要进行累积操作的元素。参数 initializer:可选参数,作为累积的初始值。如果提供了初始值,则累积操作从初始值开始;如果未提供初始值,则累积操作从可迭代对象的第一个元素开始。 输出结果: 281401207 5.结合filter()使用 filter函数用于过滤序列,过滤掉不符合条件的元素 function:用于过滤的函数iterable:可迭代对象 输出结果: [2, 4, 6, 8] 心得: 1.lambda表达式可直接赋值给变量 2.lambda表达式可结合函数使用,若函数中带有参数key或这参数function,如sort()、sorted()、min()、max()、map()、reduce()、filter()等 总结 以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。