返回顶部
首页 > 资讯 > 后端开发 > Python >关于 python 的sort 多重排
  • 561
分享到

关于 python 的sort 多重排

pythonsort 2023-01-31 05:01:06 561人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

https://www.cnblogs.com/sunny3312/arcHive/2017/01/07/6260472.html 一、基本形式 sorted(iterable[, cmp[, key[, reverse]]]) i

https://www.cnblogs.com/sunny3312/arcHive/2017/01/07/6260472.html

一、基本形式

sorted(iterable[, cmp[, key[, reverse]]])

iterable.sort(cmp[, key[, reverse]])

 参数解释:

 (1)iterable指定要排序的list或者iterable,不用多说;

 (2)cmp为函数,指定排序时进行比较的函数,可以指定一个函数或者lambda函数,如:

       students为类对象的list,没个成员有三个域,用sorted进行比较时可以自己定cmp函数,例如这里要通过比较第三个数据成员来排序,代码可以这样写:

1
2
students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
sorted(students, key=lambda student : student[2])

(3)key为函数,指定取待排序元素的哪一项进行排序,函数用上面的例子来说明,代码如下:

1
sorted(students, key=lambda student : student[2])

       key指定的lambda函数功能是去元素student的第三个域(即:student[2]),因此sorted排序时,会以students所有元素的第三个域来进行排序。

二、普通用法:

 1.原址排序

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

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

2.副本排序

1)[:]分片方法

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

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

2)sorted方法

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

1
2
3
4
x =[4, 6, 2, 1, 7, 9]
y = sorted(x)
print y #[1, 2, 4, 6, 7, 9]
print x #[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
a = [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')]

--结束END--

本文标题: 关于 python 的sort 多重排

本文链接: https://lsjlt.com/news/188353.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 关于 python 的sort 多重排
    https://www.cnblogs.com/sunny3312/archive/2017/01/07/6260472.html 一、基本形式 sorted(iterable[, cmp[, key[, reverse]]]) i...
    99+
    2023-01-31
    python sort
  • 关于AS3中Vector的sort排序
     先上2个代码private function sortRank(x:RankPlayerModel, y:RankPlayerModel):Number   {    var lastNameSort:Number = sortNum(x...
    99+
    2023-01-31
    Vector sort
  • 关于Python排序sort()函数和sorted()函数
    目录前言:1.sort() 函数 示例1:阿斯克码比较示例2:(设置reverse,由大到小排序)示例3:基于key排序(传入一个参数)2.sorted() 函数前言: &...
    99+
    2023-05-16
    Python排序 Python sort() Python sorted() Python函数
  • 关于Python列表元素排序操作sort()、min()、max()函数用法
    列表对象中提供了 sort0 方法,该方法用于对原列表中的元素进行排序,排序后原列表中的元素顺序将发生改变。 其语法格式如下: listname.sort(key=None, rev...
    99+
    2023-05-17
    Python列表 Python列表元素排序 Python列表函数
  • Java关于重排链表详细解析
    1.题目 给定一个单链表 L 的头节点 head ,单链表 L 表示为:  L0→ L1 → … → Ln-1 → Ln  请将其重新排列后变为: L0 → Ln → L1 → Ln...
    99+
    2024-04-02
  • java如何自定义List中的sort()排序,用于日期排序
    目录java 自定义List中的sort()排序1、问题描述2、解决方法3、其他java Collections类:sort()升序排序正向排序java 自定义List中的sort(...
    99+
    2024-04-02
  • SpringBoot JPA sort多属性排序的示例分析
    这篇文章主要介绍SpringBoot JPA sort多属性排序的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!SpringBoot JPA sort多属性排序在开发JPA中,遇见需要对数据进行多属性排序的情...
    99+
    2023-06-25
  • java如何自定义List中的sort()排序且用于日期排序
    本篇文章给大家分享的是有关java如何自定义List中的sort()排序且用于日期排序,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。java 自定义List中的sort()排序...
    99+
    2023-06-25
  • python列表排序用 sort()和sorted()的区别
    目录1. 是否改变原列表2.参数设置:key 和 reverse3.输入数据类型前言: 内容提要:本文比较了 Python 中用于列表排序的两种函数 sort() 和 sorted(...
    99+
    2024-04-02
  • 关于指令重排现象的两个阶段详解
    目录编译期指令重排1、上神秘代码2、编译成Java字节码(没加volatile)3、编译成Java字节码(加了volatile)4、编译器优化运行期指令重排那什么时候会产生指令重排现...
    99+
    2024-04-02
  • python 多重继承之拓扑排序
    python 多重继承之拓扑排序一、什么是拓扑排序 在图论中,拓扑排序(Topological Sorting) 是一个 有向无环图(DAG,Directed Acyclic Graph) 的所有顶点的线性序列。且该序列必须满足下面两个条件...
    99+
    2023-01-31
    拓扑 python
  • python关于多值参数的用法
    这篇文章主要介绍“python关于多值参数的用法”,在日常操作中,相信很多人在python关于多值参数的用法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python关于多值参数的用法”的疑惑有所帮助!接下来...
    99+
    2023-06-20
  • 关于mysql5.6 的排序问题.
    mysql 5.6 的排序进行了优化.  同样的sql , 在5.5 跟5.6 上可能得到不同的结果: CREATE TABLE `TestCase2` (   ...
    99+
    2024-04-02
  • 关于python中模块和重载的问题
    目录模块和重载模块与命名空间模块和重载 简单来讲,任意一个以.py结尾的python文件都是一个模块。例如有A.py和B.py两个文件。在A中可以通过导入B来读取B模块定义的内容,导...
    99+
    2024-04-02
  • [Python学习25] 关于函数更多的
    在这一章的学习中,做了一些函数和变量的练习。并不是直接运行脚本,而是在脚本中定义了一些函数,把他们导入到Python中通过执行函数的方式运行。先看代码: def break_words(stuff): """This functio...
    99+
    2023-01-31
    函数 更多 Python
  • 关于MySQL的ORDERBY排序详解
    目录前言ORDER BY 语法实践出真知实践准备静态排序动态排序总结前言 工作中常常会使用ORDER BY进行排序,了解ORDER BY多种排序方式是非常有必要的。 ORDER BY...
    99+
    2023-05-19
    MySQL 排序 MySQL ORDER BY
  • 关于Python多重继承时metaclassconflict问题解决与原理探究
    目录背景什么是metaclass(元类)类比普通class与metaclass自定义与使用metaclassmetaclass confict(元类冲突)的清晰含义解决方案参考背景 ...
    99+
    2024-04-02
  • 关于C++中sort()函数的用法,你搞明白了没
    目录sort(v.begin(),v.end(),cmp),它是用来对一组序列进行排序的。sort函数进行排序的时间复杂度为n*log2n,比冒泡之类的排序算法效率要高,包含在头文件...
    99+
    2023-03-09
    sort()函数的用法 c++ sort()函数
  • 关于C++多重继承下虚表结构的问题
    前言 昨天写一个项目时遇到一个很诡异的现象 如下代码所示: class ParentA { public : int a=0x123456; virtual voi...
    99+
    2024-04-02
  • python关于多值参数的实例详解
    说明 需要一个函数来处理的参数数是不确定的,这时可以使用多值参数。 python有两个多值参数,在参数名前增加一个*可以接收元组。在参数名前增加两个*可以接收字典。 实例 def demo(num, *args,...
    99+
    2022-06-02
    python 多值参数
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作