python sort和sorted

转自 https://www.jianshu.com/p/419a8732ac62

一、函数sort()


  1. sort() :仅对list对象进行排序,会改变list自身的顺序,没有返回值,即原地排序
  2. list.sort(key=None, reverse=False)
  • key :设置排序方法,或指定list中用于排序的元素;
  • reverse :升降序排列,默认为升序排列;
  1. 一维元素组成的list排序:忽略参数key

>>> a = [‘TaoBao‘, ‘Google‘, ‘BaiDu‘]
>>> a.sort()
>>> a
[‘BaiDu‘, ‘Google‘, ‘TaoBao‘]
  1. 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}]
  1. 多维元素 组成的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‘)]

二、sorted()


  1. sorted() :对所有可迭代对象进行排序,返回排序后的新对象,原对象保持不变;
  2. sorted(iterable [, key[, reverse]])
  • key :设置排序方法,或指定迭代对象中,用于排序的元素;
  • reverse :升降序排列,默认为升序排列;
  1. 一维元素组成的迭代对象排序
  • dictkey/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]
  • dictkey/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‘]
  1. 多维元素的排序
  • dict组成的tuplelist排序:方法类似sort()

>>> a = ({‘dell‘: 200}, {‘mac‘: 100})
>>> sorted(a, key=lambda x: list(x.values()))
[{‘mac‘: 100}, {‘dell‘: 200}]
  • tuple组成的tuplelist排序:方法类似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组成的tuplelist排序:方法类似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()函数功能强大,使用的范围更为广泛。

四、Operator模块函数

  1. Python提供了一些方便的函数,使得访问方法更加容易和快速;
  2. Operator模块是用C语言实现的,所以执行速度比python代码快;
  3. Operator模块有itemgetter、attrgetter、methodcaller等常用函数;
  4. 可以使用函数itemgetter()替代排序函数(sort、sorted)中key参数的lambda函数,更快速方便地获取元素;
  5. itemgetter():返回一个函数,通过该函数作用到目标对象上,获取目标对象对应位置上(index)的元素,即实现取元素的功能。

>>> a = [1, 2, 100]
>>> from operator import itemgetter

# 获取位置为2的元素
>>> f = itemgetter(2)
>>> f
operator.itemgetter(2)
>>> f(a)
100

# 获取位置为1和2的元素
>>> f = itemgetter(1, 2)
>>> f
operator.itemgetter(1, 2)
>>> f(a)
(2, 100)
  1. 抽象理解

    t为目标对象,f = itemgetter(n)

    调用 f(t) 时,返回t[n],即目标对象t中位置为n的元素

  2. 使用sort()sorted()排序时,可以使用itemgetter()替代key参数中的lambda函数。

from operator import itemgetter

>>> a = [(‘mac‘, 3, ‘b‘), (‘linux‘, 2, ‘a‘), (‘mac‘, 1, ‘c‘)]

>>> a.sort(key=itemgetter(1))
>>> a
[(‘mac‘, 1, ‘c‘), (‘linux‘, 2, ‘a‘), (‘mac‘, 3, ‘b‘)]

>>> sorted(a, key=itemgetter(2))
[(‘linux‘, 2, ‘a‘), (‘mac‘, 3, ‘b‘), (‘mac‘, 1, ‘c‘)]

原文地址:https://www.cnblogs.com/lzping/p/12601039.html

时间: 2024-10-10 00:45:54

python sort和sorted的相关文章

【转载】 python sort、sorted高级排序技巧

这篇文章主要介绍了python sort.sorted高级排序技巧,本文讲解了基础排序.升序和降序.排序的稳定性和复杂排序.cmp函数排序法等内容,需要的朋友可以参考下 Python list内置sort()方法用来排序,也可以用python内置的全局sorted()方法来对可迭代的序列排序生成新的序列. 1. 排序基础 简单的升序排序是非常容易的.只需要调用sorted()方法.它返回一个新的list,新的list的元素基于小于运算符(lt)来排序. >>> sorted([5, 2,

python sort、sorted高级排序技巧

Python list内置sort()方法用来排序,也可以用python内置的全局sorted()方法来对可迭代的序列排序生成新的序列. 1)排序基础 简单的升序排序是非常容易的.只需要调用sorted()方法.它返回一个新的list,新的list的元素基于小于运算符(__lt__)来排序. 复制代码 代码如下: >>> sorted([5, 2, 3, 1, 4]) [1, 2, 3, 4, 5] 你也可以使用list.sort()方法来排序,此时list本身将被修改.通常此方法不如s

python sort、sorted、reverse、reverd的区别

sort.sorted.reverse.reversed的区别 !!! error 首先应该区分的是,sort和reverse是列表的一个方法.字符串.元组.字典.集合是没有这两个方法的.而sorted和reversed是python的两个内置函数,并且只有字符串.列表.元组,可以当做参数传入,字典和集合不支持,得到的是一个生成器对象 !!! sort与sorted() sort 只有列表有该方法,直接对原来的列表进行排序,不会产生新列表 l1 = [12,2,34,54,5,17] l1.so

python sort、sorted

1. (1).sorted()方法返回一个新列表(默认升序). list.sort() (2).另一个不同:list.sort()方法仅被定义在list中,sorted()方法对所有的可迭代序列都有效. 2.key参数/函数 从python2.4开始,在list.sort()和sorted()增加了key参数,key在每个元素比较浅被调用. 例如:通过key指定的函数来忽略字符串大小写: 通过复杂对象的某些值来对复杂对象的序列进行排序: 对拥有命名属性的复杂对象进行排序: 3.Operator模

[Python]sort与sorted高级技巧

与其他语言不同,python 3.0之后,弃用了其他语言中常见的cmp方法,在sort方法中改用key实现. 之前一直疑惑自定义对象的排序如何写comparator,最后发现还是通过内部的__cmp__方法来实现. 挖坑 http://www.cnblogs.com/nju2014/p/5569983.html 对这个sort方法还是有点烦, 当key相等时,排序的结果不稳定. 如要对A = [a, b, c, d] 和B = [b, a, c ,d] 进行排序,存在这样的dict V = {a

python sort()和sorted()方法

直接上代码: list_a=['a','c','z','E','T','C','b','A','Good','Tack'] list_b=['a','c','z','E','T','C','b','A','Good','Tack'] list_a.sort() print list_a==sorted(list_b)>>>True list_a.sort(), 把list_a原地排序,没有返回值,而是把当前序列变得有序,所以list_a已经完成了排序 sorted(list_b),是内建

【python】 sort、sorted高级排序技巧

这篇文章主要介绍了Python中列表(List)的详解操作方法,包含创建.访问.更新.删除.其它操作等,需要的朋友可以参考下 Python list内置sort()方法用来排序,也可以用python内置的全局sorted()方法来对可迭代的序列排序生成新的序列. 1)排序基础 简单的升序排序是非常容易的.只需要调用sorted()方法.它返回一个新的list,新的list的元素基于小于运算符(__lt__)来排序. >>> sorted([5, 2, 3, 1, 4]) [1, 2, 3

python函数之sorted与sort

Python list内置sort()方法用来排序,也可以用python内置的全局sorted()方法来对可迭代的序列排序生成新的序列. sorted(iterable,key=None,reverse=False),返回新的列表,对所有可迭代的对象均有效 sort(key=None,reverse=False) 就地改变列表  reverse:True反序:False 正序 实例: >>>sorted([1,5,3,2,9]) [1,2,3,5,9] >>>a=[5,

Python: sort,sorted,OrderedDict的用法

Python: sort,sorted,OrderedDict的用法 from http://stqdd.com/archives/427 by 莫亚菜 python对容器内数据的排序有两种,一种是容器自己的sort函数,一种是内建的sorted函数. sort函数和sorted函数唯一的不同是,sort是在容器内排序,sorted生成一个新的排好序的容器. 对于一个简单的数组 L=[5,2,3,1,4]. sort: L.sort() sorted(...)    sorted(iterabl