排序应该是处理list列表经常用到的方法,常用的就是sort和sorted。

一、两者的差异

1、list.sort()是list是内建方法,使用sort会直接改变原列表的顺序,而sorted(list)只会返回一个已排好序的列表,如下:

1 >>> a = ['a1', 'a2', 'a3', 'a11', 'a21']2 >>>a.sort()3 >>>a4 ['a1', 'a11', 'a2', 'a21', 'a3']5 >>> b = ['b1', 'b2', 'b3', 'b11', 'b21']6 >>>sorted(b)7 ['b1', 'b11', 'b2', 'b21', 'b3']8 >>>b9 ['b1', 'b2', 'b3', 'b11', 'b21']

2、sorted()可用于任何一个可迭代的对象,比如:

>>>members

[('Mark', 30, 12000), ('John', 24, 6000), ('Tim', 27, 8000), ('David', 26, 10000)]>>>sorted(members)

[('David', 26, 10000), ('John', 24, 6000), ('Mark', 30, 12000), ('Tim', 27, 8000)]

sorted首先选择了每个成员的第一个变量进行了排序。

二、实用的操作

sort()方法和sorted()函数都内置了一个key参数,用与在进行比较前指定每个元素上要调用的函数。这里就可以脑洞大开了。

1、大部分情况下,我们并不想看到类似下面这种排序:

1 >>>sorted(b)2 ['b1', 'b11', 'b2', 'b21', 'b3']

这是默认以字符进行排序的,而我们期望的结果往往是类似于['b1', 'b2', 'b3', 'b11', 'b21']的自然排序结果。这里就可以用key来调整。

1 >>> sorted(b, key=lambda n : int(n[1:]))2 ['b1', 'b2', 'b3', 'b11', 'b21']3 >>> sorted(b, key=lambda n : int(n[1:]), reverse=True)4 ['b21', 'b11', 'b3', 'b2', 'b1']

排序将按整数的大小进行,也可以加入reverse来控制逆序。

2、key也可用来控制排序的对象

>>>members

[('Mark', 30, 12000), ('John', 24, 6000), ('Tim', 27, 8000), ('David', 26, 10000)]>>>sorted(members)

[('David', 26, 10000), ('John', 24, 6000), ('Mark', 30, 12000), ('Tim', 27, 8000)]>>> sorted(members, key=lambda n: n[2])

[('John', 24, 6000), ('Tim', 27, 8000), ('David', 26, 10000), ('Mark', 30, 12000)]

上例就是按收入(成员第3项)进行排序的。也可以先按年龄,再按收入进行排序:

>>> sorted(members, key=lambda n: (n[1], n[2]))

[('John', 24, 6000), ('David', 26, 10000), ('Tim', 27, 8000), ('Mark', 30, 12000)]

3、最骚气的当然是引入一些内库了,比如operator模块

operator.itemgetter()  通过下标

operator.attrgetter()  通过参数

这里只举个简单的例子,有兴趣的话可以去搜一搜具体的操作方法。

1 >>> from operator importitemgetter, attrgetter2 >>> sorted(members, key=itemgetter(1))3 [('John', 24, 6000), ('David', 26, 10000), ('Tim', 27, 8000), ('Mark', 30, 12000)]

python中的sort和sorted是什么意思_python中sort和sorted的另类用法相关推荐

  1. python中sorted函数逆序_Python中sorted函数的用法(转)

    [Python] sorted函数 我们需要对List.Dict进行排序,Python提供了两个方法 对给定的List L进行排序, 方法1.用List的成员函数sort进行排序,在本地进行排序,不返 ...

  2. 编写python程序、创建名为class的数据库_Python中的元类(metaclass)以及元类实现单例模式...

    一.理解类也是对象 在理解元类之前,你需要先掌握Python中的类.Python中类的概念借鉴于Smalltalk,这显得有些奇特.在大多数编程语言中,类就是一组用来描述如何生成一个对象的代码段.在P ...

  3. 在python中、对于函数定义代码的理解_python中如何理解装饰器代码?

    长文预警,[最浅显易懂的装饰器讲解] 能不能专业地复制题目?配上代码,问题分段. 我来给提主配上问题的代码. 正式回答: 1:如何理解return一个函数,它与return一个值得用法区别在哪? 敲黑 ...

  4. python函数def里面嵌套def_python 函数嵌套函数_Python中的嵌套函数

    python 函数嵌套函数 A nested function is simply a function within another function, and is sometimes calle ...

  5. python中与label类似的控件是_python中tkinter的使用(控件整理)(一)

    1.使用tkinter.Tk() 生成主窗口(window=tkinter.Tk()): window.title('标题名')修改框体的名字,也可在创建时使用className参数来命名: wind ...

  6. python中sorted函数的作用_Python中排序方法sort、函数sorted的key参数的作用分析

    从Python2.4开始,list.sort方法 和 sorted方法 都增加了一个 'key' 参数用来在进行比较之前指定每个列表元素上要调用的函数,将函数的返回值作为比较的依据. 那么怎么使用这个 ...

  7. python中的sorted是什么意思_python中sort与sorted区别

    1.sort()函数 (只对list有用) sort(...) L.sort(key = None,reverse=False) key = 函数 这个函数会从每个元素中提取一个用于比较的关键字.默认 ...

  8. python中不能使用下标运算的有哪些_Python中最常见的10个问题(列表)

    列表是Python中使用最多的一种数据结果,如何高效操作列表是提高代码运行效率的关键,这篇文章列出了10个常用的列表操作,希望对你有帮助. 注意:很多人学Python过程中会遇到各种烦恼问题,没有人帮 ...

  9. python数据类型有哪些、分别有什么用途_python中的数据类型有哪些

    python中的数据类型有9种,分别是1.字符串2.布尔类型3.整数4.浮点数5.数字6.列表7.元组8.字典9.日期. 1.字符串 1.1.如何在Python中使用字符串 a.使用单引号(') 用单 ...

  10. python中怎么比较两个列表的大小_python中对列表元素大小排序(冒泡排序法,选择排序法和插入排序法)—排序算法...

    前言 排序(Sorting) 是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个关键字有序的序列.本文主要讲述python中经常用的三种排序算法,选择排序法 ...

最新文章

  1. 软件项目管理0824:标书中疫情条款
  2. PHP分页的limit与offset
  3. 第三次学JAVA再学不好就吃翔(part113)--对象操作流
  4. 有关LinkedList常用方法的源码解析
  5. IaaS、PaaS和SaaS的区别
  6. [工具] CuteMarkEd
  7. VS调试 启动vs报错--未启动IIS
  8. 从头学习Drupal--基本架构三
  9. assemblyinstaller 无法启动计算机.上的服务,本地计算机上的Windows Search服务启动然后停止 | MOS86...
  10. JavaScript浮点运算的问题
  11. Vue如何优雅地进行事件解绑和解绑
  12. PS2019 常用快捷键大全
  13. C语言---用筛选法求100以内的素数
  14. cloudera安装
  15. Netpod Alive网络拓扑图生成、绘制有生命的网络拓扑图工具
  16. 组装一台台式计算机的流程,如何组装电脑?组装电脑的操作流程!
  17. python 安卓模拟点击_python模拟android屏幕高频点击工具
  18. 权力的游戏刷声望辅助【多开辅助】权力的游戏手游辅助挂机刷石油资源采集脚本
  19. 陆金所—稳盈-e享统计-python爬虫
  20. sql查询语句-平均分、最高最低分、判断、排序

热门文章

  1. 白盒测试的逻辑覆盖辨析(语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖)
  2. C语言 PTA 新年倒计时
  3. Flash 短片轻松学
  4. ​手机APP应用软件开发
  5. U盘启动WinPE安装Windows Server 2008
  6. 自己动手写打印机监控程序
  7. CentOS7各个版本镜像下载地址及说明、Everything版
  8. 计算机等考网络真题2018,2018年网络管理员考试试题及答案
  9. 南京大学人工智能学院教授俞扬:我的牛年小结
  10. 20190303-AJAX教程