- sorted() 函数对 所有可迭代的对象进行排序操作。
sort 与 sorted 区别:
1、sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。
2、list 的 sort 方法返回的是对已经存在的列表进行操作,无返回值,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。sorted(iterable, cmp=None, key=None, reverse=False)
参数说明:
- 【iterable】 可迭代对象。
- 【cmp】 比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。 (一般省略)
- 【key】主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
常用的用来作为参数key的函数有 lambda函数和operator.itemgetter()
尤其是列表元素为多维数据时,需要key来选取按哪一位数据来进行排序 - 【reverse】 排序规则,reverse = True 降序 , reverse = False 升序(默认)。
返回值
-
返回重新排序的列表。 *需要注意,列表的元素可以是多样的,返回列表的形式与输入列表的形式一致
-
当元素为一维数字或字母时,结果返回一个新的列表,其中元素按升序或降序排列(根据reverse参数来决定)
list = [1, 5, 7, 2, 4]
print(sorted(list))
Output:
[1, 2, 4, 5, 7]
list = ['d', 'c', 'f', 'a', 'z']
print(sorted(list))
Output:
['a', 'c', 'd', 'f', 'z']
list = ['vz', '1bf', 'gc', 'ak', '2qz']
print(sorted(list))
Output:
['1bf', '2qz', 'ak', 'gc', 'vz']
- 当数据为多维或想要按照特殊形式排序时,通过改变key函数来实现。
可作为参数key的函数形式有
list = ['a', 'bc', 'defg', 'handsome', 'qwerrtyyuu']
print(sorted(list,key=lambda x:len(x),reverse=True))
Output:
['qwerrtyyuu', 'handsome', 'defg', 'bc', 'a']
- 描述:
匿名函数lambda,是指一类无需定义标识符(函数名)的函数或子程序。
lambda 函数可以接收任意多个参数 (包括可选参数) 并且返回单个表达式的值。 - 格式:
冒号前是参数,可以有多个,用逗号隔开,冒号右边的为表达式。其实lambda返回值是一个函数的地址,也就是函数对象。 - 要点:
(1)lambda 函数不能包含命令,
(2)包含的表达式不能超过一个。 - 说明:
一定非要使用lambda函数;任何能够使用它们的地方,都可以定义一个单独的普通函数来进行替换。我将它们用在需要封装特殊的、非重用代码上, 避免令我的代码充斥着大量单行函数。
import operator
tuple_list = [('A', 1,5), ('B', 3,2), ('C', 2,6)]
print(sorted(tuple_list, key=operator.itemgetter(1) ))
Output:
[('A', 1, 5), ('C', 2, 6), ('B', 3, 2)]
- 描述:
operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为一些序号。
a = [1,2,3]
>>> b=operator.itemgetter(1) //定义函数b,获取对象的第1个域的值
>>> b(a)
2
>>> b=operator.itemgetter(1,0) //定义函数b,获取对象的第1个域和第0个的值
>>> b(a)
(2, 1)
在决策树的实现中,需要对标签按照其出现的次数进行排序
def majorityCnt(classList):
classCount = {}
for vote in classList:
if vote not in classCount.keys():
classCount[vote] = 0
classCount[vote] += 1
sortedClassCount = sorted(classCount.items(),
key=operator.itemgetter(1), reverse=True)
return sortedClassCount[0][0]
注意:对于字典的排序,需要借助items()函数来遍历其元素
items()函数将字典中的键值对改为元组,并将这些元组放到一个列表中
即返回值为一个列表,其元素为包含原字典键值对的元组
dict = {'Google': 'www.google.com', 'Runoob': 'www.runoob.com', 'taobao': 'www.taobao.com'}
print(dict.items())
Output:
dict_items([('Google', 'www.google.com'), ('Runoob', 'www.runoob.com'), ('taobao', 'www.taobao.com')])
因此,此实例中,classCount.items()获得一个列表,元素为二维元组,key=operator.itemgetter(1)按照后一个元素进行排序(即标签出现的次数)reverse=True按照降序排列。return sortedClassCount[0][0]为返回出次数最高的标签及其次数。
Original: https://blog.csdn.net/weixin_41998772/article/details/113427691
Author: 阿怪呢
Title: Python之排序函数sorted()详解
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/618386/
转载文章受原作者版权保护。转载请注明原作者出处!