|
发表于 2022-1-25 13:30:43
|
显示全部楼层
最近再看cookbook,经常遇到key参数,在vs看sorted源码看不懂 ,我说说我的看法
1、一个是返回列表一个是返回元组,元组和列表比较的规则和字符串比较像,只要某对应下标的元素不一样就不会比下去了>>> ("a",2,999999999) < ("b",)
True
但是整型和字符是不可以比较的
2、比如一个简单的列表 [2,4,1,5,2,3,3],按照这个表达式 lambda x: [nums.count(x), -x]我们得到这些序列
(2, -2); (1,-4); (1,-1); (1.-5);(2,-2); (2.-3);(2,-3) ,按照1的规则,那这五个序列从小到大是(1,-5) < (1,-4) < (1,-1) < (2,-3) = (2,-3) < (2,-2) = (2,-2)
为了测试猜想是否正确,运行 sorted(nums, key=lambda x: [nums.count(x), -x])看下结果>>> a = [2,4,1,5,2,3,3]
>>> sorted(a,key=lambda x: [a.count(x), -x])
[5, 4, 1, 3, 3, 2, 2]
sorted返回的结果比不是一个个元组,但是结果和我的猜想的顺序差不多,那我猜在sorted中会建一个这样的数据结构
假设传入序列是 a. 那个数据结构为(a[i],key参数返回值) 【0<i<len(a)】,就拿前边所说(2,(2,-2)) ,但key不为空时,就用key参数做比较
3、我感觉应该是不一样的
4、参考1,2,多参数比较是可以的
5、我再想想
|
|