zoukankan      html  css  js  c++  java
  • python2.7 sorted cmp 排序函数

    1. 不加参数

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

      >>>print sorted(a)

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

      >>>print a

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

    分析:sorted 函数会返回一个排序好的序列,并不会更改原有序列,使用时注意记录排序结果。

    默认的排序按从小到大的升序返回。

    2.参数reverse

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

      >>>print sorted(a,reverse=True)

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

    分析:reverse会改变默认的原有排序顺序。

    3.参数cmp

      自定义判断函数。更灵活的指定两个对象的大小关系。例如按照学生的分数,从高到低对学生对象进行排序。

      首先写一个学生类,包括姓名,分数,年龄。

    class Student:
      def __init__(self, name, grade, age):
        self.name = name
        self.grade = grade
        self.age = age
      def __repr__(self):
        return "%s %d %d" % (self.name, self.grade, self.age)
    
    def my_cmp(self, other):
        return self.grade - other.grade
    
    student_objects = [
        Student('john', 92, 15),
        Student('jane', 94, 12),
        Student('dave', 94, 10)
        ]
    
    print sorted(student_objects,cmp=my_cmp)
    >>>  [john 92 15, jane 94 12, dave 94 10]

      比较函数一般规定大于的判定,sorted函数返回升序,我们需要从高到低,则增加reverse关键字

    print sorted(student_objects,cmp=my_cmp,reverse=True)
    
    >>>[jane 94 12, dave 94 10, john 92 15]

    4.复杂cmp

      在一些场合,简单的比较判断无法满足需求,判断大小不是直观地判断简单数据。

      例如:对学生排序,按分数高低排序,分数高的排在前面,若遇到相同分数则按年龄排序,年龄小的排在前面。

      分析:写cmp函数,确定大于的判断,分数高的大于分数低的,若分数相同,则年龄小的大于年龄大的

    def my_cmp2(self,other):
        if self.grade > other.grade:
          return 1
        elif self.grade == other.grade:
          if self.age < other.age:
            return 1
          else:
            return -1
        else:
          return -1
    
    print sorted(student_objects,cmp=my_cmp2,reverse=True)
    
    >>>[dave 94 10, jane 94 12, john 92 15]

    ==========

    2020年05月12日14:59:54 qsy

  • 相关阅读:
    第三次上机
    第5次作业
    第二次上机练习
    第三次作业
    第一次作业
    第一次作业
    第二次上机练习
    第二次作业
    第一次作业
    第四周作业
  • 原文地址:https://www.cnblogs.com/pandaroll/p/12876255.html
Copyright © 2011-2022 走看看