python排序方法sorted和list.sort()使用讲解

本文详细介绍了Python中内置的排序方法sorted()和列表的sort()函数,包括它们的使用方法、排序原理、key参数的应用以及两者之间的区别。通过实例展示了如何按照不同规则对列表、字典等数据进行排序,强调了排序对象需要满足的条件和key参数的实现原理。
摘要由CSDN通过智能技术生成


前言

在当码农的生涯中,排序是一个常见的功能,需要高效而准确。而Python语言提供了内置函数sorted()和列表类型支持的List.sort()两种排序方式,两者排序效率和效果基本相同,但是适用对象和返回结果的方式不同。下面就基于Python 3.X对这两种方法进行说明。


一、排序函数的算法原理

Python里的sort排序使用的是Timsort排序算法,其最差情况下的时间复杂度是O(n log n),而且是使用C语言来实现的,所以排序性能优秀,配合其支持的参数,足以应对程序开发中的各种排序要求。
Timsort的核心思路是现实生产使用的数据在片段上是有序的,所以可以整个数据列表分割成一个个小的片段,现在小片段内使用插入排序,然后排序号的多个小片段一次进行归并排序。具体的原理详解可以参考:https://www.cnblogs.com/clement-jiao/p/9243066.html

二、sorted()和List.sort()使用方法讲解

1.sorted()函数使用方法

描述
sorted() 函数对所有可迭代的对象进行排序操作。

sort 与 sorted 区别:
sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。 list 的
sort 方法返回的是对已经存在的列表进行操作,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。

sorted 语法

sorted(iterable, key=None, reverse=False)  

参数说明:

  • iterable – 可迭代对象。可以是列表,可以是元祖、集合等类型。
  • key --主要是用来对需要比较的元素进行处理,只有一个参数,可以是一个函数,也可以是一个类。具体的函数的参数或者类的初始化参数就是取自于可迭代对象中,通过key参数可以对可迭代对象中的元素进行处理,用处理后的值进行排序。
  • reverse-- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。

返回值
返回重新排序的列表。(请关注这一点,也就是说,原有的列表顺序不变,返回一个的新排序后的列表)
排序的方式
对于字典,默认情况下是按照键进行排序,并返回键组成的列表。如果是其他的迭代类型,则默认是按照元素进行排序。排序时,如果是字符或者字符串,按照ASCII码进行排序;如果是中文,则按照unicode编码值进行排序。
应用实例:
最简单的使用方法(无任何参数):

b = sorted([5, 2, 3, 1, 4])
print(b)
# 输出结果—-> [1, 2, 3, 4, 5]     

你也可以使用 list 的 list.sort() 方法。这个方法会修改原始的 list(返回值为None)。通常这个方法不如sorted()方便-如果你不需要原始的 list,list.sort()方法效率会稍微高一些。

a=[5,2,3,1,4]
a.sort()
print(a)
# 输出结果—-> [1,2,3,4,5]  

另一个区别在于list.sort() 方法只为 list 定义。而 sorted() 函数可以接收任何的 iterable,例如对字典进行排序。

print(sorted({
   1: 'D', 2: 'B', 3: 'B', 4: 'E', 5: 'A'}))
# 输出结果—->[1,2,3,4,5]

利用key进行排序,比如按照绝对值进行排序。下面的例子中lambda定义了一个匿名函数,x表示从example_list中依次取出的元素,然后用abs函数对元素取绝对值,后续就会按照元素的绝对值对元素进行排序:

example_list = [5, 0,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值