Python之排序函数sorted()详解

  • 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/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球