|
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 去接收这个参数,返回值就是后面的表达式
一般比较的是一个列表里面的单个元素,所以直接比较参数就行,但是你这比较的是列表里面的列表,所以会把内层列表作为参数传进去,获取指定元素作为返回值,再根据该返回值进行比较
结合下面代码容易理解:
你这只是 ...
|