原题: 一个列表由四个元组组成,每个元组都是四个数字组成,现在要求对这个列表排序,排序规则是按照每个元组的第二个元素排序
这里的题眼是:按照每个元组的第二个元素排序 ,所以我们应该引用匿名函数 lambda
li=[(2,3,4,5),(321,123,44,99),(45,12,43,66,127),(9,999,870,65)]
li.sort(key=lambda x:x[1]) #排列第二个元素,元组被x所接受,参数按照下标索引取值
print(li)
如果只是采用 li.sort() 函数将会从左到右比较大小 类似我们C 或Java 中的冒泡排序 e.g. 22与123 比较,由于2>1 ,所以 123 排在22 前面
key 是固定的,并非自定义。
lambda 函数
定义:是指没有名字的函数,应用在需要一个函数但是又不想费神命名这个函数的场合
通常情况下,这样的函数只使用一次
注意事项: 使用lambda 表达式时,可以有多的参数,参数之间用逗号分隔,但是表达式只能有一个,即只能返回一个值 ,而且不可以出现其他非表达式语句(如 for或while)
其实 lambda 函数的首要用途是指定短小的回调函数 e.g. 假设采用爬虫技术爬取信息后对商品信息后的排序
bookinfo=[('《不一样的卡梅拉》',22.50,120),('《零基础python》',65.10,79.80),('《摆渡人》',23.40,36.00),('《雅思写作大全》',47.50,128)]
print('爬取的到的商品信息: \n',bookinfo,'\n')
bookinfo.sort(key=lambda x:(x[1],x[1]/x[2]))
print('排序后的商品信息:\n',bookinfo)