sort和sorted区别

一、列表内建方法–sort()

作用:就地对列表排序(直接在原列表上做排序)
语法:

  list.sort(func=None, key=None, reverse=False)
  • 当reverse=False时:正向排序;当reverse=True时:逆向排序。默认为False。
  • 执行完后会改变原来的list,如果你不需要原来的list,这种效率稍微高点
  • 该方法没有返回值
    sort和sorted区别_第1张图片

二、内建函数sorted()

作用:对可迭代对象排序,返回一个新的已经排序好的list
差别
sorted()不会改变原来的list,而是会返回一个新的已经排序好的list
list.sort()方法只是应用在 list 上的方法,而sorted()可用于任何一个可迭代对象 语法:

  sorted(iterable, key=None, reverse=False)

当reverse=False时:为正向排序(从小到大);当reverse=True时:为反向排序。默认为False。
执行完后返回一个新的排序好的list
在这里插入图片描述

三、高级用法

参数key:
参数key:带一个参数的函数(排序时,会依次传入列表的每一项,作为该函数的参数)。该函数用于在比较排序之前进行的操作
例子:
每个字符串比较之前,需要统一小写
sort和sorted区别_第2张图片
对于复杂的对象,使用对象的下标作为key。
例子:

>>> 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)]

使用对象的属性进行操作:
sort和sorted区别_第3张图片

重点来了!

  • 1.多维数组,如何在按照第一个元素排序的基础上,再按第二个关键字进行排序?
>>> arr = [('d',3),('a',5),('d',1),('c',2),('d',2)]
>>> sorted(arr, key = lambda x:(x[0],x[1]))
[('a', 5), ('c', 2), ('d', 1), ('d', 2), ('d', 3)]

2.多维数组,如何实现第一个元素按升序,第二个元素按降序来排列?

>>> arr = [('d',3),('a',5),('d',1),('c',2),('d',2)]
>>> sorted(arr, key=lambda x:(x[0], -int(x[1])))
[('a', 5), ('c', 2), ('d', 3), ('d', 2), ('d', 1)]

你可能感兴趣的:(python,排序算法,算法,数据结构)