一、基本形式

有两种形式:

(1)

iterable.sort(cmp=None, key=None, reverse=False)   #python 2.x
iterable.sort(key=None, reverse=False)   #python 3.x

(2) sorted(iterable, cmp=None, key=None, reverse=False)        #python 2.x

sorted(iterable, key=None, reverse=False)          #python 3.x
# 由此可看出, Python 3.x 取消了 cmp 参数, 所以如果想给 sorted()函数传参的话, 就剩下 key, 和reverse了,
# 其中,reverse 就是返回 正常排序的反序, 

作用:Return a new sorted list from the items in iterable.

参数解释:

第一个参数是一个iterable,返回值是一个对iterable中元素进行排序后的列表(list)。

可选的参数有三个,cmp、key和reverse。
1)cmp指定一个定制的比较函数,这个函数接收两个参数(iterable的元素),如果第一个参数小于第二个参数,返回一个负数;如果第一个参数等于第二个参数,返回零;如果第一个参数大于第二个参数,返回一个正数。默认值为None。
2)key指定一个接收一个参数的函数,这个函数用于从每个元素中提取一个用于比较的关键字。默认值为None。
3)reverse是一个布尔值。如果设置为True,列表元素将被倒序排列。
通常来说,key和reverse比一个等价的cmp函数处理速度要快。这是因为对于每个列表元素,cmp都会被调用多次,而key和reverse只被调用一次。

二、普通用法:

1.原址排序

1)列表有自己的sort方法,其对列表进行原址排序,既然是原址排序,那显然元组不可能拥有这种方法,因为元组是不可修改的。

1
2
3
=  [ 4 6 2 1 7 9 ]
x.sort()
print  # [1, 2, 4, 6, 7, 9]

2.副本排序

1)[:]分片方法

1
2
3
4
5
= [ 4 6 2 1 7 9 ]
=  x[ : ]
y.sort()
print  #[1, 2, 4, 6, 7, 9]
print  #[4, 6, 2, 1, 7, 9]

注意:y = x[:] 通过分片操作将列表x的元素全部拷贝给y,如果简单的把x赋值给y:y = x,y和x还是指向同一个列表,并没有产生新的副本。

2)sorted方法

sorted返回一个有序的副本,并且类型总是列表,如下:

1
2
3
4
= [ 4 6 2 1 7 9 ]
=  sorted (x)
print  #[1, 2, 4, 6, 7, 9]
print  #[4, 6, 2, 1, 7, 9] 

1
print  sorted ( 'Python' #['P', 'h', 'n', 'o', 't', 'y']

三、高级用法

1.自定义cmp比较函数

1
2
3
4
5
6
7
8
9
10
11
12
13
def  comp(x, y):
if  x < y:
return  1
elif  x > y:
return  - 1
else :
return  0
  
nums  =  [ 3 2 8  , 0  1 ]
nums.sort(comp)
print  nums  # 降序排序[8, 3, 2, 1, 0]
nums.sort( cmp # 调用内建函数cmp ,升序排序
print  nums  # 降序排序[0, 1, 2, 3, 8]

2.自定义key和reverse

1.reverse实现降序排序,需要提供一个布尔值,默认为False(升序排列)。

2.key在使用时必须提供一个排序过程总调用的函数:

1
2
3
4
5
alist  =  [( '2' '3' '10' ), ( '1' '2' '3' ), ( '5' '6' '7' ), ( '2' '5' '10' ), ( '2' '4' '10' )]
# 多级排序,先按照第3个元素排序,然后按照第2个元素排序:
print  sorted (alist,  cmp  =  None , key  =  lambda  x:( int (x[ 2 ]),  int (x[ 1 ])), reverse  =  False )
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[( '1' '2' '3' ), ( '5' '6' '7' ), ( '2' '3' '10' ), ( '2' '4' '10' ), ( '2' '5' '10' )]

四、operator.itemgetter函数

operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为一些序号(即需要获取的数据在对象中的序号),下面看例子。

1
2
3
4
5
6
7
=  [ 1 , 2 , 3 ]
>>> b = operator.itemgetter( 1 )       / / 定义函数b,获取对象的第 1 个域的值
>>> b(a)
2
>>> b = operator.itemgetter( 1 , 0 )   / / 定义函数b,获取对象的第 1 个域和第 0 个的值
>>> b(a)
( 2 1 )

要注意,operator.itemgetter函数获取的不是值,而是定义了一个函数,通过该函数作用到对象上才能获取值。

itemgetter在sort中的用法:

1
2
3
4
5
6
7
8
9
10
11
12
13
from  operator  import  itemgetter
alist  =  [( '2' '3' '10' ), ( '1' '2' '3' ), ( '5' '6' '7' ), ( '2' '5' '10' ), ( '2' '4' '10' )]
# 多级排序,先按照第3个元素排序,然后按照第2个元素排序:
print  sorted (alist,  cmp  =  None , key  =  itemgetter( 2 1 ), reverse  =  False )
print  sorted (alist,  cmp  =  None , key  =  lambda  x:itemgetter( 2 1 )(x), reverse  =  False )
print  sorted (alist,  cmp  =  None , key  =  lambda  x: map ( int , itemgetter( 2 1 )(x)), reverse  =  False )
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[( '2' '3' '10' ), ( '2' '4' '10' ), ( '2' '5' '10' ), ( '1' '2' '3' ), ( '5' '6' '7' )]
[( '2' '3' '10' ), ( '2' '4' '10' ), ( '2' '5' '10' ), ( '1' '2' '3' ), ( '5' '6' '7' )]
[( '1' '2' '3' ), ( '5' '6' '7' ), ( '2' '3' '10' ), ( '2' '4' '10' ), ( '2' '5' '10' )]

python的sort函数相关推荐

  1. python中sort函数是什么意思_python中sort和sorted函数

    在学习python的过程中,感觉python中的排序相和c++中的泛型算法还是比较相似的,但相对于c++而言更加简单易用. python中列表的内置函数sort()可以对列表中的元素进行排序,而全局性 ...

  2. python中sort函数源代码_Python中sort和sorted函数代码解析

    Python中sort和sorted函数代码解析 本文研究的主要是Python中sort和sorted函数的相关内容,具体如下. 一.sort函数 sort函数是序列的内部函数 函数原型: L.sor ...

  3. Python 列表sort函数

    文章目录 简介 一.语法 二.演示 1.基本用法 2.有参用法 总结 简介 Python和Java等编程语言一样,提供了一种自动排序的方法,Java中是Arrays.sort()方法,而Python中 ...

  4. python 使用sort()函数和正则表达式(lambda)对os.listdir()获取的文件夹文件列表进行重新排序 乱序排序

    # 排序函数,对文件列表进行排序 # 排序函数,对文件列表进行排序(filenames为文件夹文件的文件名的字符串列表) def sort_filenames(filenames):# (1)可以以l ...

  5. python中sort函数字符串_python中的sort方法使用详解

    < Python树莓派编程>--3.3 Python入门 本节书摘来自华章出版社<Python树莓派编程>一书中的第3章,第3.3节,作者:[美]沃尔弗拉姆·多纳特(Wolfr ...

  6. Python之sort()函数详解

    #从小到大排列 print(sorted([36, 5, -12, 9, -21]))#将待排序的值放入到key中的函数中,在进行比较排序 print(sorted([36, 5, -12, 9, - ...

  7. python中sorted函数的用法_Python3 中sorted() 函数的用法

    描述 sorted() 函数对所有可迭代的对象进行排序操作. 语法 sorted(iterable, key=None, reverse=False) iterable – 可迭代对象. key – ...

  8. python sort函数返回值_lambda函数与箭头函数在集合内置函数应用中的对照学习

    Python语言中有一个定义轻量级规则的lambda函数,其语法格式为: Lambda 参数列表:返回值表达式 简单的例子如:定义func=lambda x,y:x+y,则调用func(10,20)的 ...

  9. python sort函数时间复杂度_STL用法及其时间复杂度分析

    STL是C++语言中一个非常实用的代码库,叫做标准模板库,通常我们使用这个头文件即可导入STL.本文立足与C++,但是python其实也是大同小异. set set正如其名,表示的是一个集合,其分为两 ...

最新文章

  1. 机器学习从入门到精通系列之BP神经网络理论知识详解
  2. libcoredb.class.php,ThinkPHP/Lib/Core/Db.class.php中pdo处理逻辑似乎不完善,导致config中pdo配置失效...
  3. MarkDown 中使用 LaTeX 数学式
  4. pcb成型板aoi检测_通过自动光学检测(AOI)实现PCB高速检测
  5. Maven学习(1) - Maven入门
  6. VS2008远程调试简介
  7. caffe安装系列——综述
  8. JAVA 对 海康SDK二次开发
  9. python量化选股_python量化选股策略
  10. Win10如何玩Win7自带的游戏
  11. hget和get redis_redis使用手册-hset,hget 和 hmset,hmget
  12. JAVA跑步计时器app_锻炼计时器app
  13. 笔记本window7安装虚拟机centos7后通过笔记本无线网卡上网
  14. VBA 禁止在某个sheet中使用键盘Delete键
  15. android exo解码问题,android – exoplayer-自动更改质量不起作用(hls)
  16. docker学习5-docker安装tomcat环境和部署war包
  17. Mysql中B树与B+树的区别
  18. Java 获取cron表达式的下次执行时间
  19. 网络视频教程(共57个)全实战过程
  20. Js——ScrollTop、ScrollHeight、ClientHeight、OffsetHeight汇总

热门文章

  1. 六、MySQL 数据库练习题1(包含前5章练习题目及答案)
  2. 用python做算法需要哪些技能_成为一名CV算法工程师,你需要具备哪些能力?
  3. 二维插值-MATLAB
  4. pfx证书导入方式,步骤流程
  5. 哪一层提供了数据加密的功能?
  6. Pytorch中KL loss
  7. Visual C++实现推箱子游戏的核心算法设计与实现(附源码和和资源)
  8. Linux管道命令(pipe)
  9. PyQt5数据库开发2 5.1 QSqlQueryModel
  10. vue cli可视化面板运行serve报错:Error: Package exports for ‘D:\*******(路径)\node_modules\colorette‘ do not defi