美文网首页
python中sort和sort()的区别

python中sort和sort()的区别

作者: 慧琴如翌 | 来源:发表于2018-04-18 19:03 被阅读29次

    区别:

    1. 首先sorted和sort 的区别主要在于sorted是将排序完的数据赋予给一个新变量,而sort则是在原变量的基础上直接进行排序,不产生新变量;
    2. 调用方式:
      list.sort() #list本身改变了顺序
      sorted(iterable)
    3. sort只能对iterable的列表排序,sorted既能对列表也包括任何iterable ;
    In [201]: s3 = {1: 'D', 2: 'B', 4: 'B', 3: 'E', 5: 'A'}  #字典类型的
    
    In [202]: sorted(s3)        #只能用sorted排序
    Out[202]: [1, 2, 3, 4, 5]    
    <font color=red>safds</font>
    
    In [183]: s1 = 'python'
    
    In [184]: s2 = ['c','a','b']
    
    In [185]: sorted(s1)
    Out[185]: ['h', 'n', 'o', 'p', 't', 'y']
    
    In [186]: s1
    Out[186]: 'python'
    
    In [187]: sorted(s2)
    Out[187]: ['a', 'b', 'c']
    
    In [188]: s2
    Out[188]: ['c', 'a', 'b']
    
    In [189]: 
    
    In [189]: s2.sort()
    
    In [190]: s2
    Out[190]: ['a', 'b', 'c']
    
    In [191]: 
    
    In [191]: s1.sort()
    ---------------------------------------------------------------------------
    AttributeError                            Traceback (most recent call last)
    <ipython-input-191-e125c1850991> in <module>()
    ----> 1 s1.sort()
    
    AttributeError: 'str' object has no attribute 'sort'
    

    用法:

    1. 原址排序:

    列表有自己的sort方法,其对列表进行原址排序,既然是原址排序,那显然元组不可能拥有这种方法,因为元组是不可修改的

    x = [4, 6, 2, 1, 7, 9]
    x.sort()
    print x # [1, 2, 4, 6, 7, 9]
    

    2. 副本排序

    • (1)[:]分片方法

    x =[4, 6, 2, 1, 7, 9]
    y = x[ : ]
    y.sort()
    print y #[1, 2, 4, 6, 7, 9]
    print x #[4, 6, 2, 1, 7, 9]
    注意:y = x[:] 通过分片操作将列表x的元素全部拷贝给y,如果简单的把x赋值给y:y = x,y和x还是指向同一个列表,并没有产生新的副本。
    
    
    • (2)sorted方法

    sorted返回一个有序的副本,并且类型总是列表,如下:

    x =[4, 6, 2, 1, 7, 9]
    y = sorted(x)
    print y #[1, 2, 4, 6, 7, 9]
    print x #[4, 6, 2, 1, 7, 9] 
    1
    print sorted('Python') #['P', 'h', 'n', 'o', 't', 'y']
    

    复杂排序

    In [147]: a= [('b',1), ('c',2), ('a',3)]
    
    In [148]: a
    Out[148]: [('b', 1), ('c', 2), ('a', 3)]
    
    In [149]: d = sorted(a)
    
    In [150]: d
    Out[150]: [('a', 3), ('b', 1), ('c', 2)]
    
    In [151]: a
    Out[151]: [('b', 1), ('c', 2), ('a', 3)]
    
    In [152]: c = a.sort()
    
    In [153]: a
    Out[153]: [('a', 3), ('b', 1), ('c', 2)]
    
    In [154]: c
    

    3. 给对象中的项排序

    student_tuples = [
    ...     ('john', 'A', 15),
    ...     ('jane', 'B', 12),
    ...     ('dave', 'B', 10),
    ... ]
    >>> sorted(student_tuples, key=lambda student: student[2])   # sort by age
    [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
    The same technique works for objects with named attributes. For example:
    
    >>> class Student:
    ...     def __init__(self, name, grade, age):
    ...         self.name = name
    ...         self.grade = grade
    ...         self.age = age
    ...     def __repr__(self):
    ...         return repr((self.name, self.grade, self.age))
    >>> student_objects = [
    ...     Student('john', 'A', 15),
    ...     Student('jane', 'B', 12),
    ...     Student('dave', 'B', 10),
    ... ]
    >>> sorted(student_objects, key=lambda student: student.age)   # sort by age
    [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
    

    note:sorted(student_objects, key=lambda student: student.age)写法

    4. 给对象中的两项排序

    >>>sorted(student_tuples, key=itemgetter(1,2))
    [('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]
    
    >>>> sorted(student_objects, key=attrgetter('grade', 'age'))
    [('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]
    
    

    5. 根据含有子串的数目排序

    例子如下:根据字符串含有"!"的个数进行排序

    For example:
    
    >>>> from operator import methodcaller
    >>> messages = ['critical!!!', 'hurry!', 'standby', 'immediate!!']
    >>> sorted(messages, key=methodcaller('count', '!'))
    ['standby', 'hurry!', 'immediate!!', 'critical!!!']
    

    6. 升序和降序

    默认是升序,也可以按照降序排序

    # 按照升序和降序排序
    def sort4():
        student_tuples = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
        print sorted(student_tuples, key=lambda student: student[2])  #[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
        print sorted(student_tuples, key=lambda student: student[2],reverse=True) #[('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
    

    7. 更复杂排序

    更复杂地你可以构建多个步骤来进行更复杂的排序,例如对student数据先以age升序排列,再以grade降序排列。

    >>> s = sorted(student_objects, key=attrgetter('age'))     # sort on secondary key
    >>> sorted(s, key=attrgetter('grade'), reverse=True)       # now sort on primary key, descending
    [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
    

    参考:https://www.cnblogs.com/sunny3312/archive/2017/01/07/6260472.html

    相关文章

      网友评论

          本文标题:python中sort和sort()的区别

          本文链接:https://www.haomeiwen.com/subject/ajzftftx.html