python中sorted方法和列表的sort方法

sort 与 sorted 区别:

  1. sort 是应用在 list 上的方法,属于列表的成员方法,sorted 可以对所有可迭代的对象进行排序操作。
  2. list 的 sort 方法返回的是对已经存在的列表进行操作,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。
  3. sort使用方法为ls.sort(),而sorted使用方法为sorted(ls)

一、基本形式

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

排序,数字、字符串按照ASCII,中文按照unicode从小到大排序。

>>>List1 = [3, 2, 4, 5, 1, 9]
>>>List1.sort()
>>>List1
[1, 2, 3, 4, 5, 9]

如果需要一个排序好的副本,代码如下: 

>>>List1 = [3, 2, 4, 5, 1, 9]
>>>List2 = List1[:]
>>>List2.sort()
>>>List2
[1, 2, 3, 4, 5, 9]
>>>List1
[3, 2, 4, 5, 1, 9]

另一种获取已排序的列表副本的方法是使用sorted函数:

>>>List1 = [3, 2, 4, 5, 1, 9]
>>>List2 = sorted(List1)   #sorted返回一个有序的副本,并且类型总是列表
>>>List2
[1, 2, 3, 4, 5, 9]
>>>List1
[3, 2, 4, 5, 1, 9]

二、可选参数

sort方法还有两个可选参数:key和reverse

1、key在使用时必须提供一个排序过程中调用的函数:

>>>List1 = ['1', '333', '22', '55555', '4444']
>>>List1.sort(key=len)
>>>List1
['1', '22', '333', '4444', '55555']

2、reverse实现逆序排序,需要提供一个布尔值:

>>>List1 = [3, 23, 1, 0, 8]
>>>List1.sort(reverse=True)
>>>List1
[23, 8, 3, 1, 0]

True为倒序排列,False为正序排列

 三、例子

例:

列表按照其中每一个值的绝对值排序。
>>>List1 = [123, 89, -32, 0, 321, -36, 33]
>>>List2 = sorted(List1, key=abs)
>>>List2
[0, -32, 33, -36, 89, 123, 321]
>>>List1
[123, 89, -32, 0, 321, -36, 33]

对复杂的元组排序

>>>student_tuples = [
    ('john', 'A', 15), 
    ('jane', 'B', 12), 
    ('tom', 'A', 11),
    ('Jack', 'B', 13)
]
>>>result = sorted(student_tuples, key=lambda student: student[2])
>>>result
[('tom', 'A', 11), ('jane', 'B', 12), ('Jack', 'B', 13), ('john', 'A', 15)]

根据字典的value排序

默认sorted是对dict的key排序的,如果要根据dict的value排序就需要指定key参数了。

>>>dict_my = {'a': 2, 'c': 5, 'b': 1, 'ab': 6, 'e': 2}
>>>dict_my
{'a': 2, 'ab': 6, 'b': 1, 'c': 5, 'e': 2}
>>>result = sorted(dict_my)
>>>result
['a', 'ab', 'b', 'c', 'e']
>>>dict_my['c']
5
>>>result2 = sorted(dict_my, key=lambda x : dict_my[x], reverse=True)
>>>result2
['ab', 'c', 'a', 'e', 'b']

 

 

 

 

 

 
posted @ 2019-07-19 12:04  超越吧  阅读(1607)  评论(0编辑  收藏  举报