当前位置:   article > 正文

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

list.sort()和sorted()


前言

在当码农的生涯中,排序是一个常见的功能,需要高效而准确。而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)  
  • 1

参数说明:

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

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

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

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

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

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

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

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

example_list = [5, 0,
    声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/722968?site
    推荐阅读
    相关标签
      

    闽ICP备14008679号