sorted()方法

sorted()可用于任何一个可迭代对象。

原型为sorted(iterable, cmp=None, key=None, reverse=False)

iterable:一个可迭代对象;

cmp:用于比较的函数,比较什么由key决定;

key:用列表元素的某个属性或函数进行作为关键字,有默认值,迭代集合中的一项;

reverse:排序规则. reverse = True  降序 或者 reverse = False 升序,有默认值。

(1)cmp参数

cmp接受一个函数,如

def f(a,b)

  return a-b

如果a逻辑小于b,函数返回负数;a等于b,函数返回0;a大于b,函数返回正数。

但是在python3中,cmp参数被淘汰了。但是可以使用key参数实现它的功能,本文后面会有介绍。

(2)key参数

参数key的使用通常配合lambda,这是一个隐函数,使用要按照固定格式:

例如可迭代对象的中的元素是一个元组:key = lambda x:x[0],意思按每一个元组的第0个元素排序。

当然如果可迭代对象中放的是字典,那填上它的键就可以按键对应的值进行排序。

例如:

order=[{'no':1,'age':18},{'no':3,'age':19},{'no':2,'age':20}]
order = sorted(order,key=lambda x:x['no'])
print(order)
#输出[{'no': 1, 'age': 18}, {'no': 2, 'age': 20}, {'no': 3, 'age': 19}]

key中还可以使用函数

下面的例子是求按列表中元素与51的距离的大小排序。

order=[98,183,37,122,14,124,65,67]
def f2(a):
return abs(53-a)
order = sorted(order,key=lambda x:f2(x))
print(order)
#输出[65, 67, 37, 14, 98, 122, 124, 183]

(3)reverse参数

接受False 或者True 表示升序或降序。

True代表降序。

注意:sorted不会直接修改传进去的可迭代对象,需要用一个新的对象去存它return的结果。

result = sorted(list)

从零开始的Python学习 知识补充sorted的更多相关文章

  1. 豆瓣 9.0 分的《Python学习知识手册》|百度网盘免费下载|

    豆瓣 9.0 分的<Python学习知识手册>|百度网盘免费下载| 提取码:nuak 这是之前入门学习Python时候的学习资料,非常全面,从Python基础.到web开发.数据分析.机器 ...

  2. 万恶之源 - Python基础知识补充

    编码转换 编码回顾: 1. ASCII : 最早的编码. ⾥⾯有英⽂⼤写字⺟, ⼩写字⺟, 数字, ⼀些特殊字符. 没有中⽂, 8个01代码, 8个bit, 1个byte 2. GBK: 中⽂国标码, ...

  3. Python学习---JSON补充内容[中文编码 + dumps解析]

    JSON补充内容[微信解决中文乱码,接上] import json # 英文显示 dic = {"hello": "world"} str = json.dum ...

  4. 从零开始的Python学习Episode 23——进程

    ---恢复内容开始--- 进程 由于GIL的存在,python中的多线程其实并不是真正的多线程,如果想要充分地使用多核CPU的资源,在python中大部分情况需要使用多进程.Python提供了非常好用 ...

  5. 从零开始的Python学习Episode 22——多线程

    多线程 线程 线程是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位.一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务. ...

  6. 从零开始的Python学习Episode 20——面向对象(3)

    面向对象之封装 封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别:将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体. 隐藏 在python中用双下划线开 ...

  7. 从零开始的Python学习Episode 19——面向对象(2)

    面向对象之继承 继承是一种创建新类的方式,新建的类可以继承一个或多个父类(python支持多继承),父类又可称 为基类或超类,新建的类称为派生类或子类. 子类会“”遗传”父类的属性,从而解决代码重用问 ...

  8. 从零开始的Python学习Episode 17——序列化

    序列化 我们把对象(变量)从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其他语 言中也被称之为serialization,marshalling,flattenin ...

  9. 从零开始的Python学习Episode 16——模块

    一.模块 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相 ...

随机推荐

  1. 1060. [ZJOI2007]时态同步【树形DP】

    Description 小Q在电子工艺实习课上学习焊接电路板.一块电路板由若干个元件组成,我们不妨称之为节点,并将其用数 字1,2,3….进行标号.电路板的各个节点由若干不相交的导线相连接,且对于电路 ...

  2. [SCOI2012]奇怪的游戏

    题目 话说有没有跟我一样直接猜了一个最大值不会改变这样一个二乎乎的结论之后交上去保龄的呀 首先看到棋盘,选择相邻的格子,非常经典的黑白染色 显然那个二乎乎的结论是错的,随便就能\(hack\)了 于是 ...

  3. 【洛谷】【堆+模拟】P2278 操作系统

    from HNOI2003 [题目描述:] 写一个程序来模拟操作系统的进程调度.假设该系统只有一个CPU,每一个进程的到达时间,执行时间和运行优先级都是已知的.其中运行优先级用自然数表示,数字越大,则 ...

  4. Linux终端里的记录器

    我们在调试程序的时候,免不了要去抓一些 log ,然后进行分析. 如果 log 量不是很大的话,那很简单,只需简单的复制粘贴就好. 但是如果做一些压力测试,产生大量 log ,而且系统内存又比较小(比 ...

  5. 20155314 2016-2017-2 《Java程序设计》第2周学习总结

    20155314 2016-2017-2 <Java程序设计>第2周学习总结 教材学习内容总结 学习目标 了解Java编程风格 认识Java的类型与变量 掌握Java流程控制的方法(分支. ...

  6. 支持xhr浏览器:超时设定、加载事件、进度事件

    各个浏览器虽然都支持xhr,但还是有些差异. 1.超时设定 IE8为xhr对象添加了一个timeout属性,表示请求在等待响应多少毫秒后就终止.再给timeout这只一个数值后,如果在规定的时间内浏览 ...

  7. sencha 2.3中自己定义PullRefreshFn给PullRefresh加入下拉刷新事件

    Sencha removed the refreshFn from the pullrefresh plugin in ST 2.2. Here is an user extension with g ...

  8. WARNING OGG-01519

    2019-02-14 05:13:09  WARNING OGG-01519  Waiting at EOF on input trail file /home/u01/app/ogg/dirdat/ ...

  9. linux 系统运行级别一般为 0-6,请分别写出每个级别的含义

    每个运行级别的含义 0   关机模式(不要把启动级别  运行级别设置为0) 1   单用户模式 2   无NFS多用户模式 3   文本模式(命令行模式,完整的多用户模式) 4   未使用的 5   ...

  10. laravel5.5源码笔记(八、Eloquent ORM)

    上一篇写到Eloquent ORM的基类Builder类,这次就来看一下这些方便的ORM方法是如何转换成sql语句运行的. 首先还是进入\vendor\laravel\framework\src\Il ...