Python列表排序:sort()与sorted()的核心区别与使用指南
本文深入解析Python中列表排序的两种主要方式:List.sort()与sorted()。重点对比两者在原列表修改、返回值类型及适用数据类型上的差异。通过代码示例演示如何正确使用key和reverse参数实现自定义排序,帮助开发者避免常见错误,根据实际需求选择最优排序方案。
前言:
内容提要:本文比较了 Python 中用于列表排序的两种函数 sort() 和 sorted(),帮助您选择合适的排序函数。
在对列表进行排序操作时,开发者既可以选择调用 List.sort() 方法,也可以使用内置函数 sorted(List)。这两者究竟存在哪些关键差异?在实际开发中该如何抉择?许多开发者曾遇到过混淆两者的情况,例如误将 sorted 写成 sort,或者错误地将列表作为参数传入 sort() 括号内导致报错。如果您也有类似的困惑,不妨通过以下实例深入理解这两个函数的特性,从而在未来的编码中做出准确选择。
1. 是否改变原列表
首先应用 List.sort() 对列表排序,
代码示例如下:
letters=['a','dc','ab','D']
print('before sort: letters:',letters)
result1=letters.sort()
print('after sort: result1:',result1)
print('after sort: letters:',letters)运行结果为:
before sort: letters: ['a', 'dc', 'ab', 'D'] after sort: result1: None after sort: letters: ['D', 'a', 'ab', 'dc']
观察运行结果可知,List.sort() 方法没有返回任何值(即返回 None),而是直接修改了原始列表。这种特性具有两面性:其优点在于,当不再需要保留原始数据时,直接修改原列表能有效节省内存空间,特别是在处理大型列表时优势明显;其缺点则在于,由于原列表被就地修改,新手在后续代码中若未意识到这一变化,可能会错误地操作列表,从而导致程序逻辑出现意外结果。
再来看一下应用 sorted(List) 对列表排序的效果,
代码示例如下:
letters=['a','dc','ab','D']
print('before sorted: letters:',letters)
result2=sorted(letters)
print('after sorted: result2:',result2)
print('after sorted: letters:',letters)运行结果为:
before sorted: letters: ['a', 'dc', 'ab', 'D'] after sorted: result2: ['D', 'a', 'ab', 'dc'] after sorted: letters: ['a', 'dc', 'ab', 'D']
从结果可以看出,sorted(List) 会返回一个经过排序的新列表,而原始列表保持原样不变。
基于上述对比,在选择排序函数时,我们需要重点考虑以下两点:
- 1.是否希望改变原列表,如果是,选择 sort()。如果原列表不能修改,选择 sorted()。
- 2.注意使用函数的返回值,或者说排序好的列表存在哪里。比如代码为 list2=list1.sort() 或者 function(list1.sort()),那么 list2 其实是 None,而不是排序好的列表。同理,
function()函数的输入也是 None。list1 才是排序好的列表。
2.参数设置:key 和 reverse
回顾上述例子中列表 letters 的排序结果,会发现大写字母 'D' 排在了小写字母 'a' 之前。这是由于 ASCII 码中大写英文字母的编码值小于小写英文字母。若希望实现不区分大小写的字母顺序排序,该如何操作?
方法:可以设置 key 参数,对 sort() 和 sorted() 都适用。
比如:设置key=str.lower,就是按字符的小写字母形式排序。
代码示例如下:
letters=['a','dc','ab','D']
letters.sort(key=str.lower)
print(letters)运行结果为:
['a', 'ab', 'D', 'dc']
此外,默认排序方式为升序。若需降序排列,可设置reverse=True,就是按降序排列。这一参数同样是对 sort() 和 sorted() 都适用。下面的代码示例同时设置了 key 和 reverse 参数。
letters=['a','dc','ab','D']
result=sorted(letters,key=str.lower,reverse=True)
print(result)运行结果为:
['dc', 'D', 'ab', 'a']
3.输入数据类型
List.sort() 是列表对象(object)的一个方法(method),因此只能用于列表。
而sorted() 函数是 Python 语言的内置函数,可以用于 iterables,包括 列表(List),元组(Tuple),字典(Dict)等等。iterable 对象有一个特点,就是可以用在循环 for 语句中(例如上面例子的列表 letters,可以用在 for 语句中:for e in letters:)。
下面我们来看看不同数据类型应用 sorted() 函数的例子。需要注意的是,虽然 sorted() 的输入可以有多种类型,但是输出都是排序好的列表。
输入为元组(Tuple)时:
letters=('a','dc','ab','D')
result=sorted(letters)
print(result)运行结果为:
['D', 'a', 'ab', 'dc']
输入为字符串(Str)时:
letters='dasf'
result=sorted(letters)
print(result)运行结果为:
['a', 'd', 'f', 's']
从结果可以看出,输入为字符串时,输出为排序好的字符列表,单个字符为列表的一个元素。
输入为字典(Dict)时:
letters={'b':1,'a':3,'d':2,'c':1}
result=sorted(letters)
print(result)运行结果为:
['a', 'b', 'c', 'd']
从结果可以看出,sorted() 函数输出的结果是对letters.key() 排序得到的列表。
参考:https://docs.python.org/3/howto/sorting.html
到此这篇关于python列表排序用 sort()和sorted()的区别的文章就介绍到这了,更多相关python列表排序内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









