python中sort()函数的key参数用法

今天在学习匿名函数lambda的时候遇到了一个没怎么想明白的问题。

strings = ['foo', 'card', 'bar', 'aaaa', 'abab']
# 根据字符串中不同字母的数量对一个字符串集合进行排序
strings.sort(key=lambda x: len(set(list(x))))

上面strings输出的结果为:[‘aaaa’, ‘foo’, ‘abab’, ‘bar’, ‘card’]
结果是明白的,但是过程一开始没弄清楚。
后来百度了一下,参考了别人的解析才弄明白。
主要是了解sort()函数中参数key的意思:
传递给key参数的是一个函数,它指定可迭代对象中的每一个元素来按照该函数进行排序
举个例子:

# 这里先看一个不带key参数的sort()函数,大家很容易知道结果
li = [[1, 7], [1, 5], [2, 4], [1, 1]]
li.sort()
print(li)  
# [[1, 1], [1, 5], [1, 7], [2, 4]] 默认按照0维排序 再按照1维排序

def fun(li):
	return li[1]
# 这时将函数fun传递给参数key 得出结果
li.sort(key=fun)
print(li) # [[1, 1], [2, 4], [1, 5], [1, 7]]

我们可以发现好像是li中每个子元素的第二个数进行排序。
这就是key参数的作用,传入了key参数的sort()函数对li中的每个子元素[1,7],[1,5],[2,4],[1,1]都执行了fun()函数,返回它们的第1个数,分别为7,5,4,1。然后再排序得到1,4,5,7。使的出的结果对本来的li进行排序最后就得到了[[1,1],[2,4],[1,5],[1,7]]。
上述用lambda可以表示为:li.sort(key=lambda li: li[1]),这里的后面两个li是变量名,可以随意取如li.sort(key=lambda x: x[1])
最后我们再来解释一下这句:

# 根据字符串中不同字母的数量对一个字符串集合进行排序
strings.sort(key=lambda x: len(set(list(x))))

按照字符串不同字母的数量对一个字符串集合进行排序,字符串不同字母的数量,可以想到利用set集合的不重复性,于是想到利用len函数求出set集合的长度,再按照长度进行排序即可。这里赋值给x的就是strings中的每一个元素(key参数的作用)。
好了,就介绍到这,希望大家有所收获~

猜你喜欢

转载自blog.csdn.net/qq_40169189/article/details/108070945