Python之排序函数sorted()详解 您所在的位置:网站首页 python里的set会自动排序吗 Python之排序函数sorted()详解

Python之排序函数sorted()详解

#Python之排序函数sorted()详解| 来源: 网络整理| 查看: 265

文章目录 描述语法返回值实例一般用法:高级用法:1、lambda函数2、operator.itemgetter()3、机器学习实例 参考

描述 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的函数形式有

1、lambda函数 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函数;任何能够使用它们的地方,都可以定义一个单独的普通函数来进行替换。我将它们用在需要封装特殊的、非重用代码上,避免令我的代码充斥着大量单行函数。

2、operator.itemgetter() import operator tuple_list = [('A', 1,5), ('B', 3,2), ('C', 2,6)] print(sorted(tuple_list, key=operator.itemgetter(1) ))#即按照第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) 3、机器学习实例

在决策树的实现中,需要对标签按照其出现的次数进行排序

# 按照分类后类别数量排序 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]为返回出次数最高的标签及其次数。

参考

1、sorted()函数 2、python中的operator.itemgetter函数 3、python中的lambda函数用法



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有