一、函数sort()
1、
sort()
:仅对list对象进行排序,会改变list自身的顺序,没有返回值,即
原地排序
;
2、
list.sort(key=None, reverse=False)
key
:设置排序方法,或指定list中用于排序的元素;
reverse
:升降序排列,默认为升序排列;False为升序,True为降序。
3、
维
元素组成的list排序:忽略参数
key
>>> a = ['TaoBao', 'Google', 'BaiDu']
>>> a.sort()
>>> a
['BaiDu', 'Google', 'TaoBao']
4、
dict
组成的list排序
-
参数
key
获取
dict
的key或value值进行排序
>>> a = [{'dell': 200}, {'mac': 100}]
# 字典的value排序
>>> a.sort(key=lambda x: list(x.values()))
>>> a
[{'mac': 100}, {'dell': 200}]
# 字典的key排序
>>> a.sort(key=lambda x: list(x.keys()))
>>> a
[{'dell': 200}, {'mac': 100}]
-
按
dict
的长度排序
>>> a = [{'mac': 200, 'huawei': 300, 'xiaomi': 150}, {'vivo': 210, 'Galaxy': 100}, {'Smartisan': 120, 'oppo': 200, 'lenovo': 50, 'meizu': 80}]
>>> a.sort(key=lambda x: len(x))
>>> a
[{'vivo': 210, 'Galaxy': 100}, {'mac': 200, 'huawei': 300, 'xiaomi': 150}, {'Smartisan': 120, 'oppo': 200, 'lenovo': 50, 'meizu': 80}]
5、
多维元素
组成的list排序
-
按
tuple
的第
2
个元素排序
>>> a = [('mac', 3, 'b'), ('linux', 2, 'a'), ('mac', 1, 'c')]
>>> a
[('mac', 3, 'b'), ('linux', 2, 'a'), ('mac', 1, 'c')]
>>> a.sort(key=lambda x: x[1]) # lambda 函数:指定用于排序的元素
>>> a
[('mac', 1, 'c'), ('linux', 2, 'a'), ('mac', 3, 'b')]
-
按
tupel
的第
1
个和
3
个元素进行排序
>>> a.sort(key=lambda x: (x[0], x[2]))
>>> a
[('linux', 2, 'a'), ('mac', 3, 'b'), ('mac', 1, 'c')]
6、二维数组排序
(先按第二个元素降序,再按第一个元素升序)
>>> l=[['b',3],['z',2],['d',8],['a',3]]
>>> l.sort(key=lambda x:(-x[1],x[0]))
>>> l
[['d', 8], ['a', 3], ['b', 3], ['z', 2]]
二、sorted()
1、
sorted()
:对所有可迭代对象进行排序,返回排序后的新对象,原对象保持不变;
2、
sorted(iterable [, key[, reverse]])
key
:设置排序方法,或指定迭代对象中,用于排序的元素;
reverse
:升降序排列,默认为升序排列;False为升序,True为降序。
3、
一维元素
组成的迭代对象排序
-
dict
的
key/value
排序:返回
key/value
排序后组成的
list
# key排序
>>> a = {'Smartisan': 120, 'oppo': 200, 'lenovo': 50, 'meizu': 80}
>>> sorted(a)
['Smartisan', 'lenovo', 'meizu', 'oppo']
# value排序
>>> a = {'Smartisan': 120, 'oppo': 200, 'lenovo': 50, 'meizu': 80}
>>> sorted(a.values())
[50, 80, 120, 200]
-
dict
的
key/value
排序:返回排序后
(key, value)
组成的
list
# 按字典的value排序
>>> a = {'Smartisan': 120, 'oppo': 200, 'lenovo': 50, 'meizu': 80}
>>> sorted(a.items(), key=lambda x: x[1])
[('lenovo', 50), ('meizu', 80), ('Smartisan', 120), ('oppo', 200)]
-
string
排序:返回字符组成的list
>>> a = 'python'
>>> sorted(a)
['h', 'n', 'o', 'p', 't', 'y']
-
string
分割排序
>>> a = "This is a test string from Andrew"
>>> sorted(a.split(), key=str.lower) # split()函数进行字符串分割,key指定排序的方法
['a', 'Andrew', 'from', 'is', 'string', 'test', 'This']
4、
多维
元素的排序
-
dict
组成的
tuple
或
list
排序:方法类似
sort()
>>> a = ({'dell': 200}, {'mac': 100})
>>> sorted(a, key=lambda x: list(x.values()))
[{'mac': 100}, {'dell': 200}]
-
tuple
组成的
tuple
或
list
排序:方法类似
sort()
>>> a = (('mac', 3, 'b'), ('linux', 2, 'a'), ('mac', 1, 'c'))
>>> sorted(a, key=lambda x: (x[1], x[2])) # 对tuple的第2、3个元素排序
[('mac', 1, 'c'), ('linux', 2, 'a'), ('mac', 3, 'b')]
-
list
组成的
tuple
或
list
排序:方法类似
sort()
>>> a = [[1, 5, 9], [8, 4, 3], [4, 6, 2]]
>>> sorted(a, key=lambda x: x[0], reverse=True) # 按第1个元素降序排列
[[8, 4, 3], [4, 6, 2], [1, 5, 9]]
三、sort()与sorted()的区别和联系
1、
sort()
:仅作用于list对象,没有返回值,修改对象本身;
2、
sorted()
:作用于所有可迭代对象,返回新的排序对象,不修改原对象;
3、
sort()
函数不需要复制原有列表,消耗的内存较少,效率也较高;
4、
sorted()
函数功能强大,使用的范围更为广泛。
转自:
https://www.jianshu.com/p/419a8732ac62