一文掌握sort、和sorted区别

本文详细介绍了Python中sort()和sorted()的区别。sort()是列表的内置方法,它直接修改原列表并无返回值;而sorted()是独立函数,接收可迭代对象并返回一个新的已排序的列表。此外,sorted()提供了cmp、key和reverse参数以实现自定义比较、指定排序依据和改变排序方向。同时提到了argsort()、reverse()和reversed()在排序中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、sort()是可变对象的方法,无参数,无返回值,但会影响改变对象。

>>> a = [2,4,1,6,9,7,5]
>>> a.sort()
>>> a
[1, 2, 4, 5, 6, 7, 9]

2、sorted()

sorted(iterable[, cmp[, key[, reverse]]])

sorted()不会发生上述情况,sorted()函数需要一个参数(参数可以是列表、字典、元组、字符串)

>>> a = [2,4,1,6,9,7,5]
>>> sorted(a)
[1, 2, 4, 5, 6, 7, 9]

参数解释:

(1)iterable指定要排序的list或者iterable。

(2)cmp为带两个参数的比较函数,指定排序时进行比较的函数,可以指定一个函数或者lambda函数,。

(3)key为函数,指定取待排序元素的哪一项进行排序。

例如:

>>> s = [('a', 'zhangsan', 17), ('b', 'lisi', 23), ('c', 'lisi', 10)]
>>> sorted(s,key = lambda x: x[2])
[('c', 'lisi', 10), ('a', 'zhangsan', 17), ('b', 'lisi', 23)]
>>> sorted(s,key = lambda x: x[0])
[('a', 'zhangsan', 17), ('b', 'lisi', 23), ('c', 'lisi', 10)]

(4)reverse参数表示升序排列还是降序排列,默认为false(升序排列),定义为True时将按降序排列。
常和operator.itemgetter()连用。

operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为需要获取的数据在对象中的索引值。
例如;

>>> import operator
>>> s = [('a', 'zhangsan', 17), ('b', 'lisi', 23), ('c', 'lisi', 10)]
>>> sorted(s, key=operator.itemgetter(2))
[('c', 'lisi', 10), ('a', 'zhangsan', 17), ('b', 'lisi', 23)]
>>> sorted(s, key=operator.itemgetter(0))
[('a', 'zhangsan', 17), ('b', 'lisi', 23), ('c', 'lisi', 10)]
>>> sorted(s, key=operator.itemgetter(1))
[('b', 'lisi', 23), ('c', 'lisi', 10), ('a', 'zhangsan', 17)]

也可以进行多级排序。

>>> sorted(s, key=operator.itemgetter(1,2))
[('c', 'lisi', 10), ('b', 'lisi', 23), ('a', 'zhangsan', 17)]

先根据lisi,zhangsan排序,若名称相同,则再按照数字排序。

3.argsort()

argsort()函数返回的是数组值从小到大的索引值。

例如:

>>> from numpy import *
>>> x = array([6,3,9,2,7])
>>> argsort(x)
array([3, 1, 0, 4, 2])

另外,reverse()和reversed()也是用来排序,表示逆序,但不是降序。reverse()与sort()的使用方式一样,而reversed()与sorted()的使用方式相同。

例如:

>>> a = [7,0,1,3,4]
>>> a.reverse()
>>> a
[4, 3, 1, 0, 7]
>>> a = [7,0,1,3,4]
>>> reversed(a)
<listreverseiterator object at 0x02DEDBB0>
>>> for i in reversed(a):
	print(i)
 
	
4
3
1
0
7
 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值