Python3,函数sort()与sorted()

  • Post author:
  • Post category:python


一、函数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