zoukankan      html  css  js  c++  java
  • python学习-序列排序

    python的排序中,可以使用内置的sort()来对序列进行排序,也可以使用内置的sorted()函数对序列进行排序,区别是,当使用sort()时,是对原序列进行排序,而sorted()则是生成一个新的序列。

    1、采用sorted()对序列进行排序,返回一个新的序列

    1 #使用sorted()函数对序列进行排序
    2 x = [5,2,3,1,4]
    3 y = sorted(x)
    4 print(y)   #[1, 2, 3, 4, 5]
    5 print(id(x))   #1576453618504
    6 print(id(y))   #1576446734280

    2、采用内置的sort()对序列进行排序,返回值为None,对原序列进行排序

    1 #使用sort()对序列进行排序
    2 a = [5,2,3,1,4]
    3 a.sort()
    4 print(a)    #[1, 2, 3, 4, 5]

    通常sort()并没有sorted()方便,但是当不需要原序列时,sort()也还可以。

    从python2.4开始,list.sort()和sorted()增加了一个key参数,从而对排序规则进行定义

    1 #定义key值对序列进行排序
    2 lst = sorted('This is a test string from Andrew'.split(),key=str.lower)
    3 print(lst)   #['a', 'Andrew', 'from', 'is', 'string', 'test', 'This']

    注意:key参数的值应该是一个函数,它接受一个参数并返回一个用于排序目的的键。 这种技术速度很快,因为每个输入记录只需要调用一次关键函数。

    当需要对一些复杂的对象进行排序时,可以采用复杂对象里面的一些参数作为排序的参数:

    1 #复杂对象的排序
    2 student_tuple = [
    3     ('john','A',15),
    4     ('jane','B',12),
    5     ('dave','B',10),
    6     ]
    7 lst = sorted(student_tuple,key=lambda student:student[2])   #按照年龄排序
    8 print(lst)   #[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

    同样的技术适用于具有命名属性的对象:

     1 #复杂对象的排序:
     2 class Student:
     3     def __init__(self,name,grade,age):
     4         self.name = name
     5         self.grade = grade
     6         self.age = age
     7     def __repr__(self):
     8         return repr((self.name,self.grade,self.age))
     9     def weighted_grade(self):
    10         return 'CBA'.index(self.grade)/float(self.age)
    11 student_objects = [
    12     Student('john','A',15),
    13     Student('jane','B',12),
    14     Student('dave','B',10),
    15     ]
    16 lst = sorted(student_objects,key=lambda student:student.age)
    17 print(lst)   #[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

    上面采用的key值的方式对序列进行排序,在python中还提供更快更简单的排序函数,也就是operator模块,其中的itemgetter、attrgetter以及在python2.6中出现的methodcaller

     未完待续

    yang

  • 相关阅读:
    vs2008 当前上下文不存在名称xxx 解决办法
    SQL Server 2008故障转移集群+数据库镜像配置实例之一
    通过JavaScript获取页面大小
    使用JavaScript判断浏览器类型
    sql2008安装图解sql2008安装全过程
    Sqlserver中对时间类型的字段转换
    SQL Server 2008故障转移集群+数据库镜像配置实例之三
    这年头口罩都成时尚品
    一位软件工程师的6年总结[转]
    MS SQL Server查询优化方法[转]
  • 原文地址:https://www.cnblogs.com/yangshijia/p/9004388.html
Copyright © 2011-2022 走看看