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

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函数用法

  • 103
    点赞
  • 623
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
### 回答1: Python sorted函数可以用来对列表进行排序,它接收一个可迭代对象作为参数,返回排序后的新列表。示例如下:myList = [3, 8, 5, 1, 9] sortedList = sorted(myList)# sortedList = [1, 3, 5, 8, 9] ### 回答2: Pythonsorted函数是一个非常有用的函数,它用于对可迭代对象进行排序操作。sorted函数可以接受一个可迭代对象作为参数,并返回一个经过排序的新的列表。 sorted函数的基本用法是sorted(iterable, key=None, reverse=False)。其,iterable表示要排序的可迭代对象,key表示排序的基准,reverse表示排序的顺序。 如果不指定key参数,则sorted函数将按照默认的排序方式进行排序。默认情况下,sorted函数会将可迭代对象的元素按照从小到大的顺序进行排序。如果可迭代对象的元素是字符串,那么按照字母的顺序进行排序。 如果想要按照其他的排序方式进行排序,可以使用key参数。key参数接受一个函数作为参数,这个函数将会在排序时作为排序的依据。例如,如果想要按照元素的长度进行排序,可以将len函数作为key参数传入。 另外,reverse参数可以用来控制排序的顺序。如果reverse=True,那么排序的结果将会按照从大到小的顺序排列。 除了传统的列表排序外,sorted函数还可以对字符串进行排序。当对字符串进行排序时,默认情况下会按照字母的顺序进行排序。如果希望使用其他排序方式,仍然可以使用key参数进行指定。 需要注意的是,sorted函数会返回一个新的排序后的列表,原来的可迭代对象不会被改变。如果需要对原来的列表进行排序,可以使用sort方法。 综上所述,Pythonsorted函数是一个用于排序的强大工具,它可以对可迭代对象进行排序,并且可以通过key和reverse参数来控制排序的方式和顺序。它的灵活性和易用性使得它在实际的开发得到了广泛的应用。 ### 回答3: Pythonsorted函数是一个内置函数,用于对可迭代对象进行排序操作。它接受一个可迭代对象作为参数,并返回一个新的已排序的列表。 sorted函数的基本语法如下: sorted(iterable, key, reverse) 其,iterable参数是表示可迭代对象的集合,如列表、元组或字符串等。key参数是一个可选的函数,用于指定排序的键。reverse参数是一个可选的布尔值,默认为False,表示升序排列;如果设为True,则表示降序排列。 示例如下: ``` numbers = [5, 2, 8, 1, 7] sorted_numbers = sorted(numbers) print(sorted_numbers) ``` 输出结果为:[1, 2, 5, 7, 8] 在上面的示例,我们传入了一个列表numbers给sorted函数进行排序。返回结果sorted_numbers是一个新的已排序的列表。 我们也可以指定reverse参数来改变排序的顺序: ``` numbers = [5, 2, 8, 1, 7] sorted_numbers = sorted(numbers, reverse=True) print(sorted_numbers) ``` 输出结果为:[8, 7, 5, 2, 1] 在这个例子,我们将reverse参数设为True,使得sorted函数按降序排列。 此外,我们还可以使用key参数来指定一个函数,根据函数的返回值进行排序: ``` fruits = ['apple', 'banana', 'cherry', 'date'] sorted_fruits = sorted(fruits, key=len) print(sorted_fruits) ``` 输出结果为:['date', 'apple', 'cherry', 'banana'] 在这个例子,我们使用key=len来指定一个函数,表示根据字符串的长度进行排序,从而得到按字符串长度升序排列的结果。 总而言之,Pythonsorted函数是一个非常有用的工具,它可以帮助我们对可迭代对象进行排序操作。我们可以根据需要指定排序的顺序和规则,从而得到我们想要的结果。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值