| 
 | 
 
3鱼币 
请版主大人不要在帖子未超过规定时间就替我设置最佳答案,谢谢合作!!!!! 
 
- list=[ ["1","c++","demo"],  
 
 -        ["1","c","test"],  
 
 -        ["2","java",""],  
 
 -        ["8","golang","google"],  
 
 -        ["4","python","gil"],  
 
 -        ["5","swift","apple"]  
 
 - ]  
 
 - list.sort(key=lambda ele:ele[0])# 根据第1个元素排序  
 
 - print(list)  
 
 - list.sort(key=lambda ele:ele[1]) #先根据第2个元素排序  
 
 - print(list)  
 
 - list.sort(key=lambda ele:ele[1]+ele[0]) #先根据第2个元素排序,再根据第1个元素排序  
 
 - print(list)
 
  复制代码 如题,不是很懂这个sort中的函数用法,我怎么完全不懂这三个函数的运行机理呢? 
哪位大哥可以帮忙解释一下这个函数的运行机制吗  
 
 
 本帖最后由 白two 于 2021-9-20 22:33 编辑 
sort 虽然是已经封装好的方法,但你得明白,既然要比较,那一定会传参进去,所以 sort 应该是默认把每一个元素作为参数传进去 
所以每一个 lambda函数都设有一个 ele 去接收这个参数,返回值就是后面的表达式 
一般比较的是一个列表里面的单个元素,所以直接比较参数就行,但是你这比较的是列表里面的列表,所以会把内层列表作为参数传进去,获取指定元素作为返回值,再根据该返回值进行比较 
结合下面代码容易理解:
 - # 获取列表的第二个元素
 
 - def takeSecond(elem):
 
 -     return elem[1]
 
 -  
 
 - # 列表
 
 - random = [(2, 2), (3, 4), (4, 1), (1, 3)]
 
 -  
 
 - # 指定第二个元素排序
 
 - random.sort(key=takeSecond)
 
  复制代码
你这只是用的匿名函数而已,逻辑是一样的
 
下面是 sort 的源代码,但只有一段说明,底层估计是 c 写的,看不到
 -     def sort(self, *args, **kwargs): # real signature unknown
 
 -         """
 
 -         Sort the list in ascending order and return None.
 
 -         
 
 -         The sort is in-place (i.e. the list itself is modified) and stable (i.e. the
 
 -         order of two equal elements is maintained).
 
 -         
 
 -         If a key function is given, apply it once to each list item and sort them,
 
 -         ascending or descending, according to their function values.
 
 -         
 
 -         The reverse flag can be set to sort in descending order.
 
 -         """
 
 -         pass
 
  复制代码
你要是用兴趣可以去搜一下 sort 方法的原理,估计能更快领悟
  
 
 
 |   
 
 
最佳答案
查看完整内容 
sort 虽然是已经封装好的方法,但你得明白,既然要比较,那一定会传参进去,所以 sort 应该是默认把每一个元素作为参数传进去
所以每一个 lambda函数都设有一个 ele 去接收这个参数,返回值就是后面的表达式
一般比较的是一个列表里面的单个元素,所以直接比较参数就行,但是你这比较的是列表里面的列表,所以会把内层列表作为参数传进去,获取指定元素作为返回值,再根据该返回值进行比较
结合下面代码容易理解:
你这只是 ... 
 
 
 
 
 
 
 |