请版主大人不要在帖子未超过规定时间就替我设置最佳答案,谢谢合作!!!!!
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 方法的原理,估计能更快领悟
|