**sorted函数**
sorted 在Python3.5 中的源码,只摘录了下面咱们比较关注的部分
~~~
def sorted(*args, **kwargs): # real signature unknown
"""
默认返回一个包含所有排序元素的升序列表
Return a new list containing all items from the iterable in ascending order.
支持自定义键值方法的排序,并且可以设置逆序的标志将结果逆序。
A custom key function can be supplied to customize the sort order, and the
reverse flag can be set to request the result in descending order.
"""
pass
~~~
排序在我们程序开发中是经常用到的功能。无论使用何种排序算法,排序的核心是比较两个元素的大小。如果是数字,我们可以直接比较,但如果不是数字呢?直接比较数学上的大小就没有意义了,因此,比较的过程必须通过函数抽象出来。
Python 内置的 sorted 方法对列表排序是非常强大的,我们通过下面几个例子来简单了解下。
实例 1:直接对数字列表排序
~~~
>>> sorted([2,3,1,-1,0])
[-1, 0, 1, 2, 3]
~~~
实例 2:自定义键值排序
~~~
>>> sorted([2,3,1,-1,0],key=abs)
[0, 1, -1, 2, 3]
~~~
分析:sorted() 作为高阶函数,还可以接收一个 key 函数来实现自定义的排序,例如按绝对值大小排序,求绝对值的函数会作用在列表的每个元素上形成新的列表 keys,新的列表作为排序的依据,进行排序
~~~
原数据 [ 2 , 3 , 1 , -1 , 0 ]
keys [ 2 , 3 , 1 , 1 , 0 ]
~~~
按照 keys 进行升序排
~~~
keys排序 [ 0 , 1 , 1 , 2 , 3 ]
最终结果 [ 0 , 1 , -1 , 2 , 3 ]
~~~
实例 3:自定义键值排序并逆序
~~~
>>> sorted([2,3,1,-1,0],key=abs,reverse=True)
[3, 2, 1, -1, 0]
~~~
实例 4 : 对字符串排序
~~~
>>> sorted(['airvip','lucy','Pytohon','php'])
['Pytohon', 'airvip', 'lucy', 'php']
~~~
分析:默认情况下,对字符串排序,是按照 ASCII 码表的大小比较的,因为大写字母在小写字母前,所以大写字母开头的会排在小写字母开头的前面。
实例 5 :对列表中的元组按照元组的第二个值排序
~~~
>>> L = [('b',1),('a',2),('d',3),('c',3)]
>>> sorted(L,key=lambda x:x[1])
[('b', 1), ('a', 2), ('d', 3), ('c', 3)]
~~~
我们看到,现在只是按照元组的第二个值排序,但我们还想按照元组中的第一个值排序,就需要
~~~
>>> sorted(L,key=lambda x:(x[1],x[0]))
[('b', 1), ('a', 2), ('c', 3), ('d', 3)]
~~~
- 跟老司机学Python
- 了解Python
- 1、python简介
- 2、Python发展史
- 3、Python特点
- 4、Python解释器
- 入坑Python
- 1、Python环境搭建
- 2、设置环境变量
- 3、开始使用Python
- 4、运行Python程序
- 掌握Python基础
- Python基础知识
- Python运算符
- 算术运算符
- 比较运算符
- 赋值运算符
- 逻辑运算符
- 位运算符
- 成员运算符
- 身份运算符
- 运算符优先级
- Python的变量与常量
- Python数据类型
- Number数值
- String字符串
- List列表
- Tuple元组
- Dictionary字典
- Set集合
- Python流程控制语句
- 条件判断
- 循环控制
- Python函数
- 1、函数是什么
- 2、函数的定义
- 3、函数的参数
- 4、函数的调用
- 5、嵌套函数
- 6、递归函数
- 7、匿名函数
- 8、函数式编程
- 9、高阶函数
- 1、map
- 2、reduce
- 3、filter
- 4、sorted
- 10、返回函数
- 11、偏函数
- Python文件IO操作
- 标准输入输出
- 读写文件
- with读写文件
- Python高级特性
- 1、列表生成式
- 2、迭代器
- 3、生成器
- 4、装饰器
- Python模块初探
- 1、模块与包
- 2、创建模块
- 3、模块中的作用域
- 4、模块的导入
- Python面向对象编程
- 类与对象
- 类的定义及使用
- 面向对象特性
- 类中的访问域
- 查看对象详情
- Python面向对象进阶
- 类中的方法
- 类中的特殊成员
- 限制对象的属性
- 再聊多继承
- 装x式创建类
- 创建元类
- Python内置模块
- os模块
- sys模块
- random模块
- time模块
- datetime模块
- shutil模块
- collections模块
- base64模块
- json模块
- hashlib模块
- xml模块
- 1. SAX解析XML
- 2. DOM解析XML
- 3. ElementTree解析XML
- urllib模块
- logging模块
- re模块
- Python第三方模块
- Pillow与PIL
- Requests
- Tablib
- Xpinyin
- Chardet
- Pycurl
- Virtualenv
- Python操作数据库
- Mysql操作
- Sqllite操作
- Mongodb操作
- Redis操作
- Python的GUI编程
- Python中GUI的选择
- Tkinter
- wxPython
- Socket网络编程
- Socket网络编程简聊
- Socket内建方法
- TCP协议编程
- UDP协议编程
- TCP与UDP
- Python电子邮件
- SMTP发邮件
- POP3收邮件
- IMAP收邮件
- 进程线程
- 进程与线程
- 进程编程
- 使用进程池
- 进程间的通信
- 线程编程
- 使用线程锁
- Python的GIL
- Web编程
- WSGI介绍
- Web框架
- Flask使用
- 模板jinjia2使用
- 项目结构规划
- 异步与协程
- 概念扫盲
- 异步IO进化之路
- 协程是什么
- yield协程编程
- yield from
- asyncio
- async与await
- aiohttp之client
- aiphttp之server
- 网络爬虫
- 网络爬虫简聊
- Beautiful Soup模块的使用
- pyquery 模块的使用
- selenium模块的使用
- 爬取段子实例
- 错误与调试
- 错误
- 错误处理
- 抛出错误
- 高效的调试
- Python重要语句
- pass语句
- return语句
- Python开发必知
- pip使用详解
- 如何对列表进行迭代
- 如何对字典进行迭代
- 字符串格式化
- 知识扩展
- 网络模型
- GUI是什么