python 排序 sorted 如果第一个条件 相同 则按第二个条件排序
来源:互联网 发布:2016美国8月非农数据 编辑:程序博客网 时间:2024/05/21 06:59
怎样遍历一个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)
0 0
- python 排序 sorted 如果第一个条件 相同 则按第二个条件排序
- python按照多个条件排序
- python多条件排序
- 输入10 个数字,按各个位上的和从小到大排序,如果相同,则按数字从小到大排序。
- mysql多个字段排序和多个搜索条件
- MySQL数据库优化总结如果索引多个字段,第一个字段要是经常作为查询条件的。如果只有第二个字段作为查询条件,这个索引不会起到作用;
- python sorted 多个字段排序
- -比较第一与第二个字符串,是否有连续的5个字符相同,如果有
- NSArray 数据对象的多个条件进行排序
- Mysql->order by SQL 根据多个条件排序
- 排序需要多个判断条件的解决方法
- Mysql->order by SQL 根据多个条件排序
- jQuery 按条件排序
- 个条件
- C语言—输入10个数字,按各个位上的和从小到大排序,如果相同,则按数字从小到大排序
- 1061 有N个学生的数据,将学生数据按成绩高低排序,如果成绩相同则按姓名字符的字母序排序,如果姓名的字母序也相同则按照学生的年龄排序,并输出N个学生排序后的信息。
- 初学.net第二天:做了了第一个条件查询的网页
- 按模糊查询条件排序
- 一次只做一件事
- android 关于home键退出,重新进入,onCreate二次调用
- oracle数据库存储过程学习
- 中科院计算所职业培训中心2015年二季度课程安排
- 谷歌浏览器无法打开本地的HTML文件
- python 排序 sorted 如果第一个条件 相同 则按第二个条件排序
- 随机算法mt19937
- mongo认识与使用
- iOS 中KVC、KVO、NSNotification、delegate 总结及区别
- 新手学习云计算Windows下安装cygwin经验和Hadoop安装经验
- Linux-HA 入门指南
- Android DatePickerDialog样式不一致的问题
- 认识处理器-寄存器介绍
- net 第三方Dll