Python列表排序详解:reverse、sort与sorted的区别与用法
本文详细介绍Python中列表排序的三种主要方式:reverse()用于原地反转,sort()用于原地正序排序,sorted()作为内置函数返回新列表。文章对比了三者的参数、返回值及对原列表的影响,并通过代码示例展示如何处理可变与不可变对象的排序需求,帮助开发者根据场景选择合适方法。
Python语言中,列表排序主要涉及三种方法:
reverse():用于反转或倒序排列列表元素。
sort():用于对列表进行正向排序。
sorted():用于获取排序后的新列表,而不修改原列表。
在更复杂的排序场景中,后两种方法(sort和sorted)支持通过参数指定排序条件。
reverse()方法详解
该方法用于将列表中的元素顺序反转。例如:
>>> x = [1,5,2,3,4]
>>> x.reverse()
>>> x
[4, 3, 2, 5, 1]
reverse()执行的是列表反转操作,即将原列表中元素从左至右的顺序重新存放,但不会改变元素本身的内容或进行数值/字符大小的整理。若需对列表元素按大小或规则进行整理,应使用sort()正序排序方法。
sort()排序方法详解
此方法对列表内容进行正向排序,排序后的结果直接覆盖原列表(对象ID不变),即sort()是直接修改原列表的方法。
>>> a = [5,7,6,3,4,1,2]
>>> a.sort()
>>> a
[1, 2, 3, 4, 5, 6, 7]
许多Python初学者在使用sort()时容易混淆。有时需要保留排序后的结果,同时保留未排序的原始列表,常见的错误操作如下:
>>> a = [5,7,6,3,4,1,2]
>>> b = a.sort()
>>> print b
None
此时变量b的值为None(空值)。若希望既得到排序后的列表,又保留原列表,应使用sorted()方法。
sorted()方法详解
sorted()方法可以在保留原列表的同时,返回一个已排序的新列表。操作示例如下:
>>> a = [5,7,6,3,4,1,2]
>>> b = sorted(a)
>>> a
[5, 7, 6, 3, 4, 1, 2]
>>> b
[1, 2, 3, 4, 5, 6, 7]
sorted()可应用于任何数据类型的序列,返回值始终为列表形式:
>>> sorted('jb51.net')
['.', '1', '5', 'b', 'e', 'j', 'n', 't']
三者核心区别
sort()是可变对象(如列表、字典)的方法,无额外参数时默认按默认规则排序,无返回值,且会直接改变可变对象的状态。因此,sort()无需也不应接收返回值。sort()是可变对象特有的方法,元组、字符串等不可变对象不具备此方法,调用会引发异常。
>>> a=[5,4,3,2,1]
>>> a.sort()
>>>
>>> a
[1, 2, 3, 4, 5]
sorted()是Python的内置函数,并非可变对象特有。它接收一个参数(可以是列表、字典、元组、字符串等),无论输入何种类型,均返回一个以列表为容器的结果;若输入为字典,则返回键的列表。
>>> mystring="54321"
>>> mytuple=(5,4,3,2,1)
>>> mylist=[5,4,3,2,1]
>>> sorted(mystring)
['1', '2', '3', '4', '5']
>>> sorted(mytuple)
[1, 2, 3, 4, 5]
>>> sorted(mylist)
[1, 2, 3, 4, 5]
reverse()与sort()的使用方式类似,均作用于原对象;而reversed()与sorted()的使用方式类似,均返回迭代器或新序列,不修改原对象。
>>> mylist=[5,4,3,2,1]
>>> mylist.reverse()
>>> mylist
[1, 2, 3, 4, 5]
>>> mylist=[5,4,3,2,1]
>>> for i in reversed(mylist):
... print i,
...
1 2 3 4 5
此外,通过序列切片操作也可实现“逆转”效果。
>>> mystring="54321"
>>> mytuple=(5,4,3,2,1)
>>> mylist=[5,4,3,2,1]
>>> mystring[::-1]
'12345'
>>> mytuple[::-1]
(1, 2, 3, 4, 5)
>>> mylist[::-1]
[1, 2, 3, 4, 5]
关于Python列表排序方法reverse、sort、sorted的讲解至此结束,更多相关知识请参阅下方链接。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













