python 排序 sorted 如果第一个条件 相同 则按第二个条件排序
2017-04-13 17:58
746 查看
怎样遍历一个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)
相关文章推荐
- python 排序 sorted 如果第一个条件 相同 则按第二个条件排序
- python 排序 sorted 如果第一个条件 相同 则按第二个条件排序
- MySQL数据库优化总结如果索引多个字段,第一个字段要是经常作为查询条件的。如果只有第二个字段作为查询条件,这个索引不会起到作用;
- python中列表排序sort()方法或者内建函数sorted()
- python的排序 sort sorted
- 已知一数组,按第一个数最大第二个数最小,依次下去进行的规则排序
- 两个数组[n] [m] n>m 第一个数组的数字无序排列 第二个数组为空 取出第一个数组的最小值 放到第二个数组中第一个位置, 依次类推. 不能改变A数组,不能对之进行排序,也不可以倒到别的数组中。
- python内置函数sorted排序用法
- python dict sorted 排序
- python内置函数sorted排序用法
- python dict sorted 排序
- Python sorted 函数,对字典按值进行排序
- Java解题:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。
- 飘逸的python - 有的升序有的降序的情况下怎么多条件排序
- 飘逸的python - 有的升序有的降序的情况下怎么多条件排序
- 两个数组 [n] [m] n>m 第一个数组的数字无序排列 第二个数组为空 取出第一个数组的最小值 放到第二个数组中第一个位置, 依次类推. 不能改变A数组,不能对之进行排序,也不可以倒到别的数组中。
- 一个字符串参数(s)由字母(a-z,A-Z)组成, 且最大字符位数为40,要求写一个函数, 返回该参数中连续相同字母的最大个数及该字母,如果最大位数有多个,则返回第一个。例:字符串“aaaddxxxxddddxxxx”,返回值为:“x,4”。
- 对DataTable根据列名排序及GridView1的某一列相同的值只显示第一个(合并成一个)
- python sorted 自定义排序的例子
- 飘逸的python - 多条件排序及itemgetter的应用