python 排序 sorted 如果第一个条件 相同 则按第二个条件排序
python 排序 sorted 如果第一个条件 相同 则按第二个条件排序
怎样遍历一个list 符合下列条件
1. 按照元组的第一个从小到大排序
2. 如果第一个相同 则按照元组第2个从大到小 排序
- a = [[2,3],[4,1],(2,8),(2,1),(3,4)]
- b = sorted(a,key=lambda x: (x[0], -x[1]))
- print b
- a = [[2,{'a':8}],[4,{'a':1}],(2,{'a':8}),(2,{'a':1}),(3,{'a':4})]
- array = [7,8]
- def fun(x):
- return (-x[0],x[1].get('a'))
- b = sorted(a,key=fun)
- print b
性能这玩意还是要用数据说话
- import time
- n = xrange(1000000)
- x = zip(n, n)
- start = time.time()
- x.sort(key = lambda x: (x[0], -x[1]))
- end = time.time()
- print 'key', end-start
- x = zip(n, n)
- start = time.time()
- x.sort(cmp=lambda x, y: x[0] - y[0] or y[1] - x[1])
- end = time.time()
- print 'cmp', end-start
- key 2.34500002861 cmp 0.269000053406
key的代码确实优雅些,但不管从直观上,还是实测结果,都看不出来key更快。
如果逆序不能前面加个 '-' 来解决 , 可以用下面的办法 例如: 排序的是个字符串
- class Reversinator(object):
- def __init__(self, obj):
- self.obj = obj
- def __lt__(self, other):
- return other.obj < self.obj
- a = [(2,'3'),(4,'1'),(2,'8'),(2,'1'),(3,'4')]
- print sorted(a, key=lambda x: (x[0], Reversinator(x[1])))
补充:
python本身提供了排序功能,其排序算法是稳定的,即key相等的两项在排序后的先后次序不变
下面通过list.sort来演示一下如何通过key函数来进行自定义的排序
所谓的key函数,就是以参加排序的每一项作为输入,而输出则为用来排序的key
- #python list 排序
- def my_key1(x):
- return x % 10
- aList = [4, 5, 1, 2, 12, 34, 56, 9 ,80]
- aList.sort() #默认按升序排列
- print(aList)
- aList.sort(reverse = True) #按降序排列
- print(aList)
- aList.sort(key = my_key1) #根据key函数,按照个位数进行升序排列
- print(aList)
- def my_key2(x):
- return x[1]
- aList = [(4,'ab'), (56,'c'), (1,'bb'), (102, 'a')]
- aList.sort(key = my_key2) #按照每个元组的第2分量,即字符串排序
- print(aList)
原文:http://blog.chinaunix.net/xmlrpc.php?id=3140368&r=blog/article&uid=429659
python 排序 sorted 如果第一个条件 相同 则按第二个条件排序相关推荐
- Python成长之路第一篇(4)_if,for,while条件语句
有了以上的基本基础,已经上面写的几个小练习,大家肯定有很多的不满,比如查询为什么查询一次就退出了呢?下面我们来学习条件语句 一.万恶的加号 以前我们在print的时候如果要加上变量都有是使用+来作为连 ...
- 【MyBatis-Plus】第二章 条件构造器
第二章 条件构造器 文章目录 第二章 条件构造器 一.继承关系 二.SQL 拼接方法 1.AbstractWrapper 定义 2.QueryWrapper 定义 3.UpdateWrapper 定义 ...
- python 基础语法学习笔记(2019年4月第二周学习笔记)
python day01 2019.4.8 计算机基础,python 变量 1.随机存储器就是内存:断电数据丢失,读写速度快 2.外存储器,硬盘,断电数据依然保存,缺点,读写速度慢 3.操作系统是什么 ...
- Python按元组中第一个字符串升序第二个字符串降序排序
问题描述:假设有一个列表,里面包含若干元组,每个元组中有两个字符串,现在要求对列表中的元组进行排序,排序规则为:第一个字符串升序,如果第一个字符串相同则按第二个字符串降序. 参考代码: 运行结果: - ...
- python dict sorted 排序
我们知道Python的内置dictionary数据类型是无序的,通过key来获取对应的value.可是有时我们需要对dictionary中 的item进行排序输出,可能根据key,也可能根据value ...
- 【Python学习笔记】第一章基础知识:格式化输出,转义字符,变量类型转换,算术运算符,运算符优先级和赋值运算符,逻辑运算符,世界杯案例题目,条件判断if语句,猜拳游戏与三目运算符
Python学习笔记之[第一章]基础知识 前言: 一.格式化输出 1.基本格式: 2.练习代码: 二.转义字符 1.基本格式: 2.练习代码: 3.输出结果: 三.输入 1.基本格式: 2.练习代码: ...
- python中sorted的用法append_Python中高阶函数sorted()用法
在Python中,有内置的排序方法:sorted(iterable, key, reverse). Sorted()函数也是一个高阶函数,它还可以接收一个key函数来实现自定义的排序.key指定的函数 ...
- Python 内建函数 - sorted(iterable[, key][, reverse])
Manual 直译 实例 基本排序 key函数 operator模块函数 升序和降序 排序稳定性和复杂排序 其他 拓展阅读 Manual Return a new sorted list from t ...
- 【Python】sorted函数的使用
1.概述 sorted()函数是python自带的排序函数,只要是可迭代对象都可以用sorted函数进行排序. sorted()函数在排序后会产生一个新的序列,原有的序列依旧存在. 函数形式 sort ...
最新文章
- mysql 提交_MySQL 事务提交过程
- SSM实现个人博客系统
- weblogic从入门到起飞!(域模块、扩展模块)(三)
- zookeeper 都有哪些使用场景?
- 玩转oracle 11g(5):表空间的作用
- RSocket协议初识
- HTML5中的自定义属性总结
- rest-assured之获取响应数据(Getting Response Data)
- react月份选择控件_看我的案例:用react写一个日历控件!
- 基于JAVA+SpringMVC+MYSQL的医院皮试管理系统
- M进制转N进制(C++)
- android pie华为更新,华为多款机型近期将迎来Android Pie系统更新,下列这几款肯定有你...
- Linux自动配置部署,企业级自动化部署方案——ansible实现tomcat自动安装和配置,...
- ACDsee的安装过程
- excel模板报表转PDF下载
- 安装好vmware后界面默认英语如何修改成中文或者其他语言
- 满足互动、发出用户民意的BBS论坛
- ​卧槽!这世上为什么要有乱码这个东西???
- 编写一个学生类(Students),包括姓名(name)、性别(sex)、学号(num)、语文课(Chinese)、英语课(English)、数学课(Math)和平均值(avg),方法包括求三门课的平
- Google I/O 见闻
热门文章
- linux正则表达式的使用方法,Linux中基本正则表达式
- pg多行合并为逗号分隔一行_postgresql 将逗号分隔的字符串转为多行的实例_PostgreSQL_数据库...
- lol游戏挂机软件_LOL出手整治,大量玩家被封10年,代练屡禁不止的原因找到了...
- 软件测试工具按用途分分为哪几类,以测试的形态分软件测试可以分为哪几类?...
- 中级php开发面试,PHP中级工程师面试题(二)
- clickhouse 同步mysql_ClickHouse和他的朋友们(9)MySQL实时复制与实现
- 皮一皮:这是什么鬼畜产品!
- 皮一皮:所以这也是大数据的一种?
- 每日一皮:当你开始研究一个新项目时是这样的吗?
- 每日一皮:程序员的生存状态 ...