python 中sorted与sort有什么区别

sort(cmp=None, key=None, reverse=False)

sorted(iterable, cmp=None, key=None, reverse=False)

sort是容器的函数,用List的成员函数sort进行排序

sorted是Python的内建函数相同的参数,用built-in函数sorted进行排序

sorted(iterable,key=None,reverse=False),返回新的列表,对所有可迭代的对象均有效

sort(key=None,reverse=False) 就地改变列表 reverse:True反序;False 正序

例如:

>>> a=[1,3,5,2,9,4,7,8,6,0]

>>> a.sort()

>>> a

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> a=[1,3,5,2,9,4,7,8,6,0]

>>> sorted(a)

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> a

[1, 3, 5, 2, 9, 4, 7, 8, 6, 0]

以下是详细说明

Python list内置sort()方法用来排序,也可以用python内置的全局sorted()方法来对可迭代的序列排序生成新的序列。

sorted(iterable,key=None,reverse=False),返回新的列表,对所有可迭代的对象均有效

sort(key=None,reverse=False) 就地改变列表 reverse:True反序;False 正序

sort是容器的函数:sort(cmp=None, key=None, reverse=False)

sorted是python的内建函数:sorted(iterable, cmp=None, key=None, reverse=False)

参数解析:

cmp:比较函数,比较什么参数由key决定。例如:cmp(e1, e2) 是具有两个参数的比较函数,返回值:负数(e1 < e2);0(e1 == e2);正数( e1 > e2)。

key:用列表元素的某个属性或函数作为关键字。

reverse:排序规则,可以选择True或者False。

sorted多一个参数iterable:待排序的可迭代类型的容器

示例1:

>>> a=[1,2,5,3,9,4,6,8,7,0,12]

>>> a.sort()

>>> a

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12]

>>> a=[1,2,5,3,9,4,6,8,7,0,12]

>>> sorted(a)

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12]

>>> a

[1, 2, 5, 3, 9, 4, 6, 8, 7, 0, 12]

区别:

对于一个无序的列表a,调用a.sort(),对a进行排序后返回a,sort()函数修改待排序的列表内容。

而对于同样一个无序的列表a,调用sorted(a),对a进行排序后返回一个新的列表,而对a不产生影响。

示例2:

假设用元组保存每一个学生的信息,包括学号,姓名,年龄。用列表保存所有学生的信息。

>>> list1=[(8, 'Logan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)]

>>> list1.sort()

>>> list1

[(2, 'Mike', 22), (5, 'Lucy', 19), (8, 'Logan', 20)]

>>> list1=[(8, 'Logan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)]

>>> sorted(list1)

[(2, 'Mike', 22), (5, 'Lucy', 19), (8, 'Logan', 20)]

>>> list1

[(8, 'Logan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)]

小结:由示例可以看出,当列表由list(或者tuple)组成时,默认情况下,sort和sorted都会根据list[0](或者tuple[0])作为排序的key,进行排序。

以上都是默认的排序方式,我们可以编写代码控制两个函数的排序行为。主要有三种方式:基于key函数;基于cmp函数和基于reverse函数

1)基于key函数排序

>>> list1=[(8, 'Logan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)]

>>> list1.sort(key=lambda x:x[2])

>>> list1

[(5, 'Lucy', 19), (8, 'Logan', 20), (2, 'Mike', 22)]

>>> list1=[(8, 'Logan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)]

>>> sorted(list1, key=lambda x:x[2])

[(5, 'Lucy', 19), (8, 'Logan', 20), (2, 'Mike', 22)]

>>> list1

[(8, 'Logan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)]

2)基于cmp函数

>>> list1=[(8, 'Zogan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)]

>>> list1.sort(cmp=lambda x,y:cmp(x[1],y[1]))

>>> list1

[(5, 'Lucy', 19), (2, 'Mike', 22), (8, 'Zogan', 20)]

>>> list1=[(8, 'Zogan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)]

>>> sorted(list1, cmp=lambda x,y:cmp(x[1],y[1]))

[(5, 'Lucy', 19), (2, 'Mike', 22), (8, 'Zogan', 20)]

>>> list1

[(8, 'Zogan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)]

3)基于reverse函数

>>> a=[1,2,5,3,9,4,6,8,7,0,12]

>>> a.sort(reverse=False)

>>> a

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12]

>>> a=[1,2,5,3,9,4,6,8,7,0,12]

>>> a.sort(reverse=True)

>>> a

[12, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

>>> a.sort(reverse=True)

小结:reverse=False为升序排序;reverse=True为降序排序

python中sort与sorted的区别_python排序函数sort()与sorted()的区别相关推荐

  1. python中def func是什么意思_Python的函数参数详解

    原标题:Python的函数参数详解 前言 Python中函数的参数可以分为两大类形参和实参~ def func(x, y): # x, y 就是形参 print(x, y) func(2, 3) # ...

  2. python中def fun()是什么意思_python学习函数

    函数 对象 模块 定义函数 def MyFirstFunction(): print('第一个函数') ······ 调用函数 MyFirstFunction() 加入参数 def MySecondF ...

  3. python中str的index什么意思_python index函数是什么意思

    Python index() 方法检测字符串中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,该方法与 python find() 方法一样 ...

  4. Python中lambda详解(包括内置函数map、reduce、filter、sorted、max)

    文章目录 一.lambda是什么? 1.lambda语法 2.语法详解 二.lambda的使用 1.定义 2.调用 3.替换 4.作返回值 三.lambda作参数 1.map函数 2.reduce函数 ...

  5. python中find是什么意思啊_python中str的find()

    今天学习语法的时候发现字符串自带函数find和操作符in功能十分近似,几乎一模一样 if'a'inname: print'Yes, it contains the string "a&quo ...

  6. python中标识符下划线用作开头_python python中那些双下划线开头的那些函数都是干啥用用的...

    1.写在前面 今天遇到了__slots__,,所以我就想了解下python中那些双下划线开头的那些函数都是干啥用用的,翻到了下面这篇博客,看着很全面,我只了解其中的一部分,还不敢乱下定义. 其实如果足 ...

  7. python属性名以两个下划线开头_python python中那些双下划线开头的那些函数都是干啥用用的...

    1.写在前面 今天遇到了__slots__,,所以我就想了解下python中那些双下划线开头的那些函数都是干啥用用的,翻到了下面这篇博客,看着很全面,我只了解其中的一部分,还不敢乱下定义. 其实如果足 ...

  8. python中有序序列是什么意思_Python中列表是一种有序序列

    [简答题]磁盘管理 [简答题]造锍熔炼习题 [填空题]38. 表达式 abs(3+4j) 的值为____________. [单选题]Linux安装过程中的硬盘分区工具是( ). [简答题]shell ...

  9. Python中通过索引名称提取数据loc()函数Python中通过行和列下标提取数据iloc()函数

    [小白从小学Python.C.Java] [Python全国计算机等级考试] [Python数据分析考试必会题] ● 标题与摘要 Python中通过索引名称提取数据 loc()函数 Python中通过 ...

  10. python中那些双下划线开头的那些函数都是干啥用用的

    1.写在前面 今天遇到了__slots__,,所以我就想了解下python中那些双下划线开头的那些函数都是干啥用用的,翻到了下面这篇博客,看着很全面,我只了解其中的一部分,还不敢乱下定义. 其实如果足 ...

最新文章

  1. 8.VMware View 4.6安装与部署-connection server(View Transfer Server)
  2. 查看/清除 本地电脑/浏览器缓存?
  3. 实验报告类与对象水井问题_物业设施设备巡检检查对象、周期和频次
  4. ndk linux 最新版本,NDK各版本下载
  5. 测试记录流水s1 0080481T02
  6. leetcode第一刷_Word Search
  7. 云计算 雾计算 边缘计算的区别
  8. R语言领跑 大数据岗位霸占IT薪酬榜单
  9. Hadoop教程(一) Hadoop入门教程
  10. 修改表字段长度sql
  11. C# IntPtr类型和使用/unsafe选项编译程序
  12. 3DMAX里怎样打包贴材质的文件不丢失贴图材质?
  13. 【Elasticsearch源码】 更新性能分析
  14. vue中views新建文件夹的代码规范
  15. OA自动化制造自动化
  16. Science揭秘:为什么“好记性不如烂笔头”?
  17. python画皮卡丘
  18. 联想小新pro13关闭自动调节亮度
  19. 初识C++之智能指针
  20. html 超链接标签 a 的基本用法

热门文章

  1. Url传值的Get method and Post method
  2. jetty源码阅读总结1
  3. Asp.Net前台页面调用后台cs变量
  4. 迁移 Linux 系统,第 1 部分——如何迁移备份和裸机恢复 Linux 系统
  5. 按shift键调出命令行的脚本
  6. 微软已成全球SaaS老大,谁将成为中国SaaS行业龙头
  7. SharePoint Backup
  8. 关于Synchronized的用法
  9. tomcat 6.0配置
  10. [翻译]在SQL Server中使用CLR调用.NET方法