python中的sort()和sorted()函数

本文介绍了Python中用于排序的sort()和sorted()函数,包括它们的使用方法、参数解析以及示例。sort()是列表的成员方法,会直接修改原列表,而sorted()则是返回一个新的排序列表,不改变原数据。文中通过多个例子展示了如何根据不同需求使用key和cmp(Python2)参数进行排序,并强调了两者在Python3中的区别。
1. sort()函数
(1)说明

sort() 是应用在 list 上的方法,属于列表的成员方法,执行完后会改变原来的list。

(2)语法

iterable.sort(cmp, key, reverse)

  • iterable:指要排序的list
  • cmp:指定排序时进行比较的函数,可以指定一个函数或者lambda函数。该函数带有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。
  • key:是一个函数,指定取待排序元素的哪一项进行排序
  • reverse:等于True表明是升序排序,等于False表明是降序排序,默认是升序
(3)例子
  • 例1 —— cmp的应用

  students为类对象的list,每个成员有三个域,用sort进行比较时可以自己定义key函数,例如这里要通过比较第三个数据成员来排序,代码如下

students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
students.sort(cmp = lambda student1, student2 : cmp(student1[2],student2[2]))
print(students)

输出[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
注意: cmp在python3中已经取消了,因此上述代码python3无法运行,推荐的是使用key

  • 例2 —— key的应用

等价于上例,代码如下:

students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
students.sort(key = lambda student : student[2])
print(students)

输出[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
注意:cmp和key都可以定义函数,但匿名函数lambda使用的比较多些,如果这两省略key,则是对第一个数据成员进行排序,得到的结果恰巧和上述例子一样

  • 例3
d = [4,1,4,5,3]
d,sort()
print(d)

输出[1, 3, 4, 4, 5]

  • 例4(特殊)
d = ["abcc","abcd","abd","acd"]
d.sort()
print(d)
d.sort(key = len)
print(d)

输出
['abcc', 'abcd', 'abd', 'acd']
['abd', 'acd', 'abcc', 'abcd']

注意
  对比两个输出,第一个sort()由于没有key函数,则比较字符会从第一个字符依次比较,短字符串因为没有字符和长字符串比较而排到后面,得到输出1。
  第二个sort()加了函数key,则会将长度相同的字符串聚集成一个簇,然后簇内比较字符串大小,短字符串的簇排在前面,长字符串的簇排在后面,得到输出2。

2. sorted()函数
(1)说明

  sorted() 可以对所有可迭代的对象进行排序操作,执行完后不会改变原来的迭代对象,这里的迭代对象用得比较多的还是list。

(2)语法

sorted(iterable, cmp, key, reverse)

这里的参数和sort()函数是一样的。

(3)例子

这里的例子将上述sort()的例子的语法修改成sorted()后结果是一样的。这里就举一个最简答的例子

x =[4, 6, 2, 1, 7, 9]
y = sorted(x)
print(y)
print(x)

输出:
[1, 2, 4, 6, 7, 9]
[4, 6, 2, 1, 7, 9]

3. 有用的链接
  • https://blog.youkuaiyun.com/u013759354/article/details/80243705
  • https://blog.youkuaiyun.com/memory_qianxiao/article/details/80548203
  • https://blog.youkuaiyun.com/yedoubushishen/article/details/51996692?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值