sort与sorted的区别

Posted 焦国峰的随笔日记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sort与sorted的区别相关的知识,希望对你有一定的参考价值。

描述

        我们需要对List进行排序,Python提供了两个方法对给定的List L进行排序 :
        方法1.用对List的成员函数sort进行排序
        方法2.用内置函数sorted进行排序(从2.4开始)

-------------------------------------------------sorted--------------------------------------------------------

        sorted() 函数对所有可迭代的对象进行排序操作
>>> help(sorted)

Help on built-in function sorted in module builtins:
sorted(iterable, /, *, key=None, reverse=False)

    Return a new list containing all items from the iterable in ascending order.

    A custom key function can be supplied to customize the sort order, and the
    reverse flag can be set to request the result in descending order.

--------------------------------------------------sort---------------------------------------------------------

        sort() 函数用于对原列表进行排序,如果指定参数,则使用比较函数指定的比较函数
>>> help(list.sort)
Help on method_descriptor:

sort(...)
L.sort(key=None, reverse=False) -> None -- stable sort *IN PLACE*

----------------------------------------------参数说明-----------------------------------------------------

原型:sort(key,reverse=False)

key:用来指定一个函数,此函数在每次元素比较时被调用,此函数代表排序的规则,也就是你按照什么规则对你的序列进行排序;

reverse:是用来表明是否逆序,默认的False情况下是按照升序的规则进行排序的,当reverse=True时,便会按照降序进行排序。

注;一般来说,cmp和key可以使用lambda表达式

sort 与sorted的区别

sort()与sorted()的不同在于,sort是在原位重新排列列表,而sorted()是产生一个新的列表。

sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。

list 的 sort 方法返回的是对已经存在的列表进行操作,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作

示例:

示例一


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

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

区别:
对于一个无序的列表a,调用a.sort(),对a进行排序后返回a,sort()函数修改待排序的列表内容。
而对于同样一个无序的列表a,调用sorted(a),对a进行排序后返回一个新的列表,而对a不产生影响。

 示例二


假设用元组保存每一个学生的信息,包括学号,姓名,年龄。用列表保存所有学生的信息。

>>> list1=[(8, \'Logan\', 20), (2, \'Mike\', 22), (5, \'Lucy\', 19)]
>>> list1.sort()
>>> list1
[(2, \'Mike\', 22), (5, \'Lucy\', 19), (8, \'Logan\', 20)]

>>> list1=[(8, \'Logan\', 20), (2, \'Mike\', 22), (5, \'Lucy\', 19)]
>>> sorted(list1)
[(2, \'Mike\', 22), (5, \'Lucy\', 19), (8, \'Logan\', 20)]
>>> list1
[(8, \'Logan\', 20), (2, \'Mike\', 22), (5, \'Lucy\', 19)]

小结:
由示例可以看出,当列表由list(或者tuple)组成时,默认情况下,sort和sorted都会根据list[0](或者tuple[0])作为排序的key,进行排序。
以上都是默认的排序方式,我们可以编写代码控制两个函数的排序行为。主要有三种方式:基于key函数;基于cmp函数和基于reverse函数

 基于key函数排序


>>> list1=[(8, \'Logan\', 20), (2, \'Mike\', 22), (5, \'Lucy\', 19)]
>>> list1.sort(key=lambda x:x[2])
>>> list1
[(5, \'Lucy\', 19), (8, \'Logan\', 20), (2, \'Mike\', 22)]

>>> list1=[(8, \'Logan\', 20), (2, \'Mike\', 22), (5, \'Lucy\', 19)]
>>> sorted(list1, key=lambda x:x[2])
[(5, \'Lucy\', 19), (8, \'Logan\', 20), (2, \'Mike\', 22)]
>>> list1
[(8, \'Logan\', 20), (2, \'Mike\', 22), (5, \'Lucy\', 19)]

 基于reverse函数


>>> a=[1,2,5,3,9,4,6,8,7,0,12]
>>> a.sort(reverse=False)
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12]

>>> a=[1,2,5,3,9,4,6,8,7,0,12]
>>> a.sort(reverse=True)
>>> a
[12, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>> a.sort(reverse=True)

小结:reverse=False为升序排序(默认);reverse=True为降序排序

 博客搬运地址

 

以上是关于sort与sorted的区别的主要内容,如果未能解决你的问题,请参考以下文章

`sorted(list)` 与 `list.sort()` 有啥区别?

python中list.sort()与sorted()的区别

python中sort()与sorted()的区别

sort与sorted的区别

python排序函数sort()与sorted()区别

sort与sorted的区别及实例