参考链接: Python中的函数

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

很多时候我们获取到一个列表后,这个列表并不满足我们的需求,我们需要的是一个有特殊顺序的列表.

这时候就可以使用list.sort方法和内置函数sorted,本文就是介绍list.sort方法和sorted内置函数的使用方法和区别.

一、list.sort方法

list.sort方法会就地排序列表,也就是说不会把原列表复制一份。这也是这个方法的返回值是None的原因,提醒您本方法不会新建一个列表。

在这种情况下返回None其实是Python的一个惯例:如果一个函数或者方法对对象进行的是就地改动,那它就应该返回 None,好让调用者知道传入的参数发生了变动,而且并未产生新的对象。

来看一下代码:

# coding=utf-8

list_a = [1, 2, 8, 3, 7, 9, 5, 7]

# sort()方法没有返回值

list_b = list_a.sort()

print("list_a: ", list_a)

print('list_b: ', list_b)

运行结果:

list_a:  [1, 2, 3, 5, 7, 7, 8, 9]

list_b:  None

用返回None来表示就地改动这个惯例有个弊端,那就是调用者无法将其串联起来。而返回一个新对象的方法则正好相反,它们可以链式调用,从而形成连贯接口。

二、sorted内置函数

与 list.sort 相反,内置函数sorted会新建一个列表作为返回值。

这个方法可以接受任何形式的可迭代对象作为参数,甚至包括不可变序列或生成器,而不管sorted接受的是怎样的参数,它最后都会返回一个列表。

代码示例:

list_c = [1, 2, 8, 3, 7, 9, 5, 7]

# sorted内置函数会返回一个排序后的新列表

list_d = sorted(list_c)

print("list_c: ", list_c)

print('list_d: ', list_d)

运行结果:

list_c:  [1, 2, 8, 3, 7, 9, 5, 7]

list_d:  [1, 2, 3, 5, 7, 7, 8, 9]

可以看到,使用内置函数sorted时,返回了一个新的列表,而原列表没有发生改变。

这有两种好处:

1.如果我们即需要使用原列表,也需要使用排序后的列表,或者说我们要将一个非列表的可迭代对象排序成列表,sorted都可以做到

2.有返回值时,我们可以进行链式调用

# 可以对非列表的可迭代对象排序生成列表

str_e = 'python'

list_e = sorted(str_e)

print(list_e)

# 链式调用

str_f = '-'.join(sorted(str_e)).upper().split('-')

print(str_f)

运行结果:

['h', 'n', 'o', 'p', 't', 'y']

['H', 'N', 'O', 'P', 'T', 'Y']

三、关键字参数key和reverse

不管是 list.sort 方法还是 sorted 函数,都有两个可选的关键字参数:

key: 接收一个只有一个参数的函数,这个函数会被用在序列里的每一个元素上,所产生的结果将是排序算法依赖的对比关键字。

比如说,在对一些字符串排序时,可以用 key=str.lower 来实现忽略大小写的排序,或者是用 key=len 进行基于字符串长度的排序。key的默认值是恒等函数,也就是默认用元素自己的值来排序。

reverse:

如果被设定为 True,被排序的序列里的元素会以降序输出(也就是说把最大值当作最小值来排序),reverse的默认值是 False.

phone = ('HUAWEI', 'OPPO', 'MI', 'MEIZU', 'VIVO')

# 按长度进行排序

phone_list = sorted(phone, key=len)

print(phone_list)

phone_list_re = sorted(phone, key=len, reverse=True)

print(phone_list_re)

运行结果:

['MI', 'OPPO', 'VIVO', 'MEIZU', 'HUAWEI']

['HUAWEI', 'MEIZU', 'OPPO', 'VIVO', 'MI']

上面的代码中,第一次排序新建了一个按照长度排序的字符串列表。第二次排序是将按长度排序由升序变成了降序。

细心的您应该可以发现,第二次的结果并不是第一次排序的结果的完全翻转。

OPPO和VIVO的长度都是4,reverse=True后,它们的相对位置跟第一次排序是一样的。这是什么原因呢?

sorted和list.sort背后的排序算法都是Timsort,它是一种自适应算法,会根据原始数据的顺序特点交替使用插入排序和归并排 序,以达到最佳效率。

Python的排序算法Timsort是稳定的(知道这一点就可以了),意思是就算两个元素比不出大小,在每次排序的结果里它们的相对位置是固定的。

因为用到的排序算法是稳定的,也就是说在长度一样时,OPPO和VIVO的相对位置不会改变。 关于list.sort()方法和sorted内置函数的使用,现在已经掌握了~

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

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

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

  2. Python 面向对象之双下方法,内置函数

    isinstance和issubclass isinstance(obj,cls)      # 检查是否obj是否是类 cls 的对象 class Foo(object):passobj = Foo ...

  3. 微课系列(二):列表方法sort()和内置函数sorted()的稳定排序特点

    技术要点: 在使用列表的sort()方法或者内置函数sorted()进行排序时,可以使用key参数指定排序规则.对于排序规则没有覆盖到的元素,谁在前谁在后都是一样的.保留这些元素本来的相对顺序,这样的 ...

  4. python编写函数模拟内置函数sorted_python内置函数sorted()用法深入分析

    本文实例讲述了python内置函数sorted()用法.分享给大家供大家参考,具体如下: 列表对象提供了sort()方法支持原地排序,而内置函数sorted()不支持原地操作只是返回新的列表,并不对原 ...

  5. Python内置函数sorted()和列表方法sort()的排序原理

    问题描述:在Python中,可以使用内置函数sorted()和列表方法sort()对数据进行排序,但要求所有数据支持关系运算符,也就是这些数据本身是可以比较大小的才能进行排序,除非使用key参数明确指 ...

  6. Python内置函数sorted()和列表方法sort()排序规则不得不说的事

    Python内置函数sorted()和列表方法sort()可以使用key参数指定排序规则,并且都是稳定排序,也就是说,对于指定规则不能涵盖的元素,本来谁在前面,排好以后谁还是在前面. 直接用代码说话: ...

  7. Python内置函数sorted()高级排序用法

    可以结合Python内置函数sorted()从入门到精通来看一些稍微基础的排序用法. >>> from operator import itemgetter >>> ...

  8. Python 内置函数sorted()在高级用法

    对于Python内置函数sorted(),先拿来跟list(列表)中的成员函数list.sort()进行下对比.在本质上,list的排序和内建函数sorted的排序是差不多的,连参数都基本上是一样的. ...

  9. python中reversed是什么意思_Python内置函数reversed()用法分析

    这篇文章主要介绍了Python内置函数reversed()用法,结合实例形式分析了reversed()函数的功能及针对序列元素相关操作技巧与使用注意事项,需要的朋友可以参考下 reversed()函数 ...

最新文章

  1. SpringMVC——通俗易懂讲讲Ajax~
  2. linux 查找 jdk 安装路径
  3. Ansible-list-Dictionary-数据格式
  4. 华为海选开发者状元?还送14件豪礼?
  5. 一步一步教你使用AgileEAS.NET基础类库进行应用开发-基础篇-通过SQL实现特殊业务...
  6. ES6新特性_ES6语法糖_class静态成员---JavaScript_ECMAScript_ES6-ES11新特性工作笔记034
  7. QSrcollBar样式表设置
  8. 计算机谈歌曲简单,计算机应用基础公开课制作一首简单的MP3歌曲.ppt
  9. 电脑重装系统后被格式化了怎么恢复之前的数据?
  10. [Mac软件推荐] 三款提高 Mac 使用效率的必备软件
  11. MapReduce中加强内容
  12. 百度关键词分析工具_百度网站关键词快排系统 - 网站被降权的原因分析
  13. RabbitMQ的架构模型
  14. 看完你就知道什么是瞎忙与高效
  15. 程序员网页版工具集合
  16. (全网最详细教程)康耐视读码器(以DM260S为例子)详细实用步骤
  17. 直播带货表格模板-自动显示图片-自动关联系列商品
  18. java抢答器实现思路,汇编实现竞赛抢答器 | 术与道的分享
  19. 姿态传感器和IMU的联系和区别
  20. 黑马程序员_Java面向对象四大特征

热门文章

  1. java中Object.equals()简单用法
  2. string转为char数组_StringBuilder的区别是什么?String是不可变?一点课堂(多岸学院)...
  3. log4jdbc mysql_[简单]log4jdbc-log4j2配置简记_MySQL
  4. 计算机组装维护文献,组装计算机论文,关于《计算机组装维护》课程教学相关参考文献资料-免费论文范文...
  5. php无限评论回复_php实现无限级评论功能_后端开发
  6. spark将rdd转为string_八、Spark之详解Tranformation算子
  7. 字典排序什么意思_字典排序问题
  8. 接口里面的方法都是抽象方法吗_大家都在讲高中学习的方法有哪些,那方法和技巧有什么异同的吗?...
  9. strocli64 源码_storcli 简易使用介绍
  10. JAVA知识基础(六):抽象