• 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)
    

      

  • 相关阅读:
    php的基础知识(三)
    php的基础知识(二)
    css的基础用法(下)
    css的基础用法(上)
    Conceptual blockbusting--chap7 Kinds of blockbusters
    Conceptual blockbusting--chap6 Alternate thinking languages
    Conceptual blockbusting--chap5 Intellectual and Expressive blocks
    Conceptual blockbusting--chap4 Cultural and Environmental blocks
    Conceptual blockbusting
    Conceptual blockbusting- chap2 perceptual blocks
  • 原文地址:https://www.cnblogs.com/chjbbs/p/6705199.html
Copyright © 2020-2023  润新知