zoukankan      html  css  js  c++  java
  • 飘逸的python

    曾经客户端的同事用as写一大堆代码来排序,在得知python排序往往只需要一行,惊讶无比,遂对python产生浓厚的兴趣。

    之前在做足球的积分榜的时候需要用到多条件排序,如果积分相同,则按净胜球,再相同按进球数,再相同按失球数。

    即按积分P、净胜球GD、进球GS、失球GA这样的顺序。
    在python中,排序非常方便,排序的参数主要有key、reverse。参数cmp不建议使用了,在python3.0被移除了,用参数key代替。
    对于多条件排序,也非常简单,只需要记住下面这句话就行。 即
    参数key指定的函数返回一个元组,多条件排序的顺序将按照元组的顺序。
    看了下面的代码你就明白了,下面是2010世界杯小组赛A组的积分榜。


    teamitems = [{'team':'France'     , 'P':1 , 'GD':-3 , 'GS':1 , 'GA':4},
                {'team':'Uruguay'     , 'P':7 , 'GD':4  , 'GS':4 , 'GA':0},
                {'team':'SouthAfrica' , 'P':4 , 'GD':-2 , 'GS':3 , 'GA':5},
                {'team':'Mexico'      , 'P':4 , 'GD':1  , 'GS':3 , 'GA':2}]
    
    print sorted(teamitems ,key = lambda x:(x['P'],x['GD'],x['GS'],x['GA']),reverse=True)
    


    输出
    [{'P': 7, 'GD': 4, 'GS': 4, 'GA': 0, 'team': 'Uruguay'}, 
     {'P': 4, 'GD': 1, 'GS': 3, 'GA': 2, 'team': 'Mexico'}, 
     {'P': 4, 'GD': -2, 'GS': 3, 'GA': 5, 'team': 'SouthAfrica'}, 
     {'P': 1, 'GD': -3, 'GS': 1, 'GA': 4, 'team': 'France'}]
    即小组排名是乌拉圭、墨西哥、南非、法国。


    不过这样一个个取字典的键值有点啰嗦,用itemgetter更简洁优雅,上面那句代码可以用如下替换。

    from operator import itemgetter
    print sorted(teamitems ,key = itemgetter('P','GD','GS','GA'),reverse=True)
    


  • 相关阅读:
    a gcc 4.2.4 bug(被stos指令累加后%edi作为参数的)
    gcc -02引起内存溢出'unsigned i'应修订为'volatile unsigned i'
    gcc优化引起get_free_page比__get_free_page返回值多4096
    gcc请不要优化
    change_bit 按位取反
    IBM messed up *AGAIN* in their thinkpad: 0xA0000 -> 0x9F000
    python正则实例
    详解volatile 关键字与内存可见性
    并发基础知识
    Spring通过注释配置Bean2 关联关系
  • 原文地址:https://www.cnblogs.com/aukle/p/3225752.html
Copyright © 2011-2022 走看看