内容提要:本文比较了 Python 中用于列表排序的两种函数 sort() 和 sorted(),帮助您选择合适的排序函数。

对列表排序时,既可以用 List.sort(),也可以用 sorted(List),这两个函数有什么不同呢?如何选择?我以前常常分不清这两个函数,等到程序报错了,才知道 sorted 写成 sort 了,List 不能写在 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() 没有返回值,而是直接改变了原列表。这既是优点也是缺点。说它是优点呢,有时不需要再使用原列表,直接修改原列表可以节约内存空间,尤其当这个列表很大时。而它的缺点也正是因为改了原列表,新手在程序设计时容易忽视这一点,在后续程序中错误地操作列表,导致得不到预计的结果。

再来看一下应用 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() 排序得到的列表。

本文对您有帮助的话,请点赞支持一下吧,谢谢!

关注我 宁萌Julie,互相学习,多多交流呀!

参考:https://docs.python.org/3/howto/sorting.html

【Python】列表排序,用 sort() 还是 sorted()?相关推荐

  1. python 列表排序方法sort、sorted技巧篇

    Python list内置sort()方法用来排序,也可以用python内置的全局sorted()方法来对可迭代的序列排序生成新的序列. 1)排序基础 简单的升序排序是非常容易的.只需要调用sorte ...

  2. [转载] Python列表排序 list.sort方法和内置函数sorted

    参考链接: Python中的函数 Python列表排序 list.sort方法和内置函数sorted 很多时候我们获取到一个列表后,这个列表并不满足我们的需求,我们需要的是一个有特殊顺序的列表. 这时 ...

  3. Python列表排序 list.sort方法和内置函数sorted

    Python列表排序 list.sort方法和内置函数sorted 很多时候我们获取到一个列表后,这个列表并不满足我们的需求,我们需要的是一个有特殊顺序的列表. 这时候就可以使用list.sort方法 ...

  4. 【Python】排序函数 sort、sorted 对复杂列表排序

    1 lambda 表达式 匿名函数. 匿名函数lambda:是指一类无需定义标识符(函数名)的函数或子程序. lambda 函数可以接收任意多个参数 (包括可选参数) 并且返回单个表达式的值. lam ...

  5. python list map成员排序_python的map关于Python列表排序方法reverse、sort、sorted详细说明...

    python语言中的列表排序方法有三个:reverse反转/倒序排序.sort正序排序.sorted可以获取排序后的列表.在更高级列表排序中,后两中方法还可以加入条件参数进行排序. reverse() ...

  6. python排序之sort和sorted

    python排序之sort和sorted 在使用python的时候很多时候需要用到排序操作,自己挨个去排太麻烦,而且效率也比较低下.因此学会使用Python自带的排序函数就显得尤为必要了. pytho ...

  7. 一木.溪桥学Python-05: 字符串str、字节bytes、列表list、sort()、sorted()

    一木.溪桥 在Logic Education跟Amy学Python 12期:Python基础课 一木.溪桥学Python-05: 字符串str.字节bytes.列表list.sort().sorted ...

  8. python中argsort,sort 和 sorted,operator.itemgetter函数

    下面对argsort,sort 和 sorted这几个排序函数做一个简单的介绍 argsort() 一维数组 argsort()函数,是numpy库中的函数 argsort()函数是将数组中的元素从小 ...

  9. python 列表排序_python列表排序有哪些

    python列表排序:1.冒泡排序,是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来:2.插入排序,通过构建有序序列,对于未排序数据,在已排序序列中 ...

  10. Python 列表排序

    题目描述: 每次随机生成1个[-100,100]之间的整数,共生成10个整数加到列表中,对列表元素进行排序,使输出结果为: 正数在前,从大到小排列, 负数在后,从小到大排列. Python 列表排序 ...

最新文章

  1. nagios监控三部曲之——为什么nagios不能发送报警邮件(2)
  2. navicat for mysql收藏夹
  3. Python技巧之“is”对比“==”
  4. Ubuntu文件的复制、移动和删除命令
  5. DRF的版本控制,认证,权限和频率限制
  6. Java中遍历数组使用foreach循环还是for循环?
  7. 译 | .NET Core 基础架构进化之路(一)
  8. LeetCode 934 最短的桥
  9. CCF NOI1039 2的n次方
  10. Django学习笔记-MySQL
  11. 软考(中级-软件设计师)知识点整理
  12. 三菱PLC 闪烁动作 ST语言
  13. gwr模型用什么做_迷你世界微缩模型还能这样用,玩家自己就能做皮肤
  14. 解决 array subscript has type char 错误
  15. Ubuntu18.04设置自动连接WIFI
  16. python概率分布拟合_使用曲线拟合在Python中拟合对数正态分布
  17. 高级数据结构——AVL树
  18. java中strictfp么意思_java中的strictfp的作用
  19. python元祖封包_Python基础——解包与封包
  20. 在阿里云服务器发邮件

热门文章

  1. pycharm使用了ctrl+鼠标回到原来的地方方法
  2. 计算机通信原理知识点,《计算机通信原理与技术》.pdf
  3. 【项目源码】JSP超市积分管理系统源码下载
  4. excel 查询 表关联_从Excel查询表获取里程
  5. python跨表处理数据_python 利用panda 实现列联表(交叉表)
  6. 为什么使用vi /etc/sysconfig/network-scripts/ifcfg-ens33打开的编辑器是空的?
  7. 黑苹果安装教程 (Mojave 10.14.5) ThinkPad T450
  8. 阿里云云服务器ECS简单使用
  9. lemming games 1!! hdlbits
  10. 解决element-ui对话框组件el-dialog遮罩层小问题