zoukankan      html  css  js  c++  java
  • python中的sort和sorted

    共同点

    都有三个参数,

    cmp用户自定义(指定函数),每个元素都会调用,效率没key高

    key带一个参数的函数,用来为每个元素提取比较值

    reverse=True    翻转

    sort

    sort作用的对象一般是列表

    sort直接排序后就改变了自己,不用生成新的对象,所以效率更高

    >>> m=[1,2,3,4,5]

    >>> m.sort(reverse=True

    >>> m

    [5, 4, 3, 2, 1]

    >>> m

    ['This', 'is', 'a', 'test', 'string', 'from', 'Andrew']

    >>> m.sort()

    >>> m

    ['Andrew', 'This', 'a', 'from', 'is', 'string', 'test']

    >>> m.sort(key=str.lower)

    >>> m    

    ['a', 'Andrew', 'from', 'is', 'string', 'test', 'This']

     

    sorted

    python的内置函数

    能够接受一切可迭代的对象

    排序后不会改变自身,会新建一个对象,因此效率较低,但功能强大

    对字典的排序(只是key)

    >>> sorted({1: 'D', 2: 'B', 3: 'B', 4: 'E', 5: 'A'})

    [1, 2, 3, 4, 5]

    >>> sorted("This is a test string from Andrew".split(), key=str.lower)

    ['a', 'Andrew', 'from', 'is', 'string', 'test', 'This']                        #和上面的sort也可以

    key参数需要指定一个函数,这个函数一个需要一个参数,且返回一个可用来比较的权值

    这个函数仅仅会调用一次,比cmp参数指定的函数效率要高

    我们可以使用operator中itemgetter, attrgetter, methodcaller来快速定义key函数,

    >>> from operator import itemgetter, attrgetter, methodcaller

    >>> sorted(student_tuples, key=itemgetter(1,2))            #允许多级比较

    [('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]            #和上面的sort也可以

    >>> test            #字典同样也可以多级比较,只不过是指定key

    [{'grade': 'A', 'score': 15, 'name': 'john'}, {'grade': 'B', 'score': 10, 'name': 'dave'}, {'grade': 'B', 'score': 12, 'name': 'jane'}]

    >>> sorted(test, key=itemgetter('score','grade') )

    [{'grade': 'B', 'score': 10, 'name': 'dave'}, {'grade': 'B', 'score': 12, 'name': 'jane'}, {'grade': 'A', 'score': 15, 'name': 'john'}]

    使用attrgetter,可以对 对象的属性进行排序等

    sorted(student_objects, key=attrgetter('grade', 'age'))

    [('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]

    对字典排序:

    >>> test                #按分数排再按等级排

    {'sun': ['E', 3], 'zhao': ['A', 90], 'wang': ['A', 88], 'li': ['B', 75]}

    >>> sorted(test.iteritems(), key=lambda x: (x[1][1],x[1][0]))

    [('sun', ['E', 3]), ('li', ['B', 75]), ('wang', ['A', 88]), ('zhao', ['A', 90])]

  • 相关阅读:
    优化windows7硬盘操作文件的速度
    Google 开源API汇总
    兼容IE和FF:复制本页地址 收藏本页地址 复制当前页地址和标题
    暂时中断一段时间
    Silverlight C# 游戏开发:绚丽的粒子特效颜色粒子(一)
    任天堂模拟器Silverlight版开发,POPNes Emulator!
    Silverlight C# 游戏开发:资源的处理,图像算法(一)
    Silverlight C# 游戏开发:绚丽的粒子特效粒子效果(二)
    吐血的有道谜题
    Silverlight C# 游戏开发:Flyer09扇动翅膀的蝴蝶
  • 原文地址:https://www.cnblogs.com/wxl-dede/p/4995905.html
Copyright © 2011-2022 走看看