`
gaopenghigh
  • 浏览: 245762 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

python中List的sort方法(或者sorted内建函数)的用法

阅读更多
python列表排序

简单记一下python中List的sort方法(或者sorted内建函数)的用法。

关键字:
python列表排序 python字典排序 sorted


List的元素可以是各种东西,字符串,字典,自己定义的类等。

sorted函数用法如下:
sorted(data, cmp=None, key=None, reverse=False)

其中,data是待排序数据,可以使List或者iterator, cmp和key都是函数,这两个函数作用与data的元素上产生一个结果,sorted方法根据这个结果来排序。
cmp(e1, e2) 是带两个参数的比较函数, 返回值: 负数: e1 < e2, 0: e1 == e2, 正数: e1 > e2. 默认为 None, 即用内建的比较函数.
key 是带一个参数的函数, 用来为每个元素提取比较值. 默认为 None, 即直接比较每个元素.
通常, key 和 reverse 比 cmp 快很多, 因为对每个元素它们只处理一次; 而 cmp 会处理多次.

通过例子来说明sorted的用法:

1. 对由tuple组成的List排序
>>> students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10),]


用key函数排序(lambda的用法见 注释1)
>>> sorted(students, key=lambda student : student[2])   # sort by age
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]


用cmp函数排序
>>> sorted(students, cmp=lambda x,y : cmp(x[2], y[2])) # sort by age
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]


用 operator 函数来加快速度, 上面排序等价于:(itemgetter的用法见 注释2)
>>> from operator import itemgetter, attrgetter
>>> sorted(students, key=itemgetter(2))


用 operator 函数进行多级排序
>>> sorted(students, key=itemgetter(1,2))  # sort by grade then by age
[('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]



2. 对由字典排序
>>> d = {'data1':3, 'data2':1, 'data3':2, 'data4':4}
>>> sorted(d.iteritems(), key=itemgetter(1), reverse=True)
[('data4', 4), ('data1', 3), ('data3', 2), ('data2', 1)]


注释1
参考:http://jasonwu.me/2011/10/29/introduce-to-python-lambda.html

注释2
参考:http://ar.newsmth.net/thread-90745710c90cf1.html
class itemgetter(__builtin__.object)
|  itemgetter(item, ...) --> itemgetter object
|
|  Return a callable object that fetches the given item(s) from its operand.
|  After, f=itemgetter(2), the call f(r) returns r[2].
|  After, g=itemgetter(2,5,3), the call g(r) returns (r[2], r[5], r[3])

相当于
def itemgetter(i,*a): 
    def func(obj): 
        r = obj[i] 
        if a: 
            r = (r,) + tuple(obj[i] for i in a) 
        return r 
    return func 

>>> a = [1,2,3] 
>>> b=operator.itemgetter(1) 
>>> b(a) 
2 
>>> b=operator.itemgetter(1,0) 
>>> b(a) 
(2, 1) 
>>> b=itemgetter(1) 
>>> b(a) 
2 
>>> b=itemgetter(1,0) 
>>> b(a) 
(2, 1) 


参考资料:
1. http://www.linuxso.com/linuxbiancheng/13340.html
2. http://www.douban.com/note/13460891/
分享到:
评论

相关推荐

    Python中的 sort 和 sorted的用法与区别

    今天在做一道题时,因为忘了Python中sort和sorted的用法与区别导致程序一直报错,找了好久才知道是使用方法错误的问题!现在就大致的归纳一下sort和sorted的用法与区别 1. sort: sort是Python中列表的方法 sort()...

    python中List的sort方法指南

    简单记一下python中List的sort方法(或者sorted内建函数)的用法。  List的元素可以是各种东西,字符串,字典,自己定义的类等。 sorted函数用法如下: sorted(data, cmp=None, key=None, reverse=False)  其中,...

    Python3中`sorted()函数`与`lambda表达式`原理解析

    Python3中sorted()函数与lambda表达式原理解析相信很多小伙伴们在一开始学习Python的一些高级用法时遇到过很多困扰。我准备日常分享一些比较浅显的原理解析帮助大家理解。博主的原文:lambda表达式sorted()函数目录...

    用不同的例子来展示 sorted() 函数和 sort() 方法的用法

    在Python编程语言中,`sorted()`函数和`list.sort()`方法是两个非常重要的工具,用于对数据进行排序。它们在处理列表和其他可迭代对象时,提供了便利的方式,使得数据能够按照特定顺序排列。这里我们将详细探讨这两...

    Python-Python排序容器类型SortedListSortedDict和SortedSet

    SortedList是Python中的一个有序列表,它扩展了Python的内置list类型,提供了额外的排序功能。SortedList会自动保持其元素的排序状态,无论是插入新元素还是删除现有元素,它都会立即进行调整。这在需要频繁地对列表...

    Python 列表排序方法reverse、sort、sorted详解

    python语言中的列表排序方法有三个:reverse反转/倒序排序、sort正序排序、sorted可以获取排序后的列表。在更高级列表排序中,后两中方法还可以加入条件参数进行排序。 reverse()方法 将列表中元素反转排序,比如...

    python中的sort方法使用详解

    Python中的sort()方法用于数组排序,本文以实例形式对此加以详细说明: 一、基本形式 列表有自己的sort方法,其对列表进行原址排序,既然是原址排序,那显然元组不可能拥有这种方法,因为元组是不可修改的。 x = ...

    python排序函数sort()与sorted()的区别

    sorted是Python的内建函数相同的参数,用built-in函数sorted进行排序 sorted(iterable,key=None,reverse=False),返回新的列表,对所有可迭代的对象均有效 sort(key=None,reverse=False) 就地改变列表 reverse:Tru

    Python中最常用的10个内置函数.docx

    输出结果:sorted() 函数和 sort() 函数是有区别的:sort() 是应用在列表 list 上的方法,而 sorted 可以对所有可迭代的对象进行排序操作。列表 list 的 sort() 方法返回的是对已经存在的列表进行操作,而内置函数 ...

    深入理解python中sort()与sorted()的区别

    Python list内置sort()方法用来排序,也可以用python内置的全局sorted()方法来对可迭代的序列排序生成新的序列 一,最简单的排序 1.使用sort排序 my_list = [3, 5, 1, 4, 2] my_list.sort() print (my_list) #输出...

    Python中sort和sorted函数代码解析

    在Python编程语言中,`sort`和`sorted`都是用于对序列进行排序的函数,但它们之间存在一些关键差异。本文将深入解析这两个函数的工作原理、参数以及如何使用它们进行自定义排序。 首先,我们来看`sort`函数。`sort`...

    python中sort和sorted排序的实例方法

    - 自Python 2.4起,`sort()` 和 `sorted()` 都引入了 `key` 参数,用于指定一个函数,该函数会在比较元素之前应用于每个元素。 - `key` 函数的返回值用于比较,而不是原始元素本身。 - 例如,使用 `key=str.lower...

    对python3 sort sorted 函数的应用详解

    本文将详细介绍Python3中的两种主要排序方法:`sort()` 和 `sorted()`,并提供丰富的示例来帮助理解这两种方法的用法。 #### 1. `sort()` 方法 `sort()` 是列表(list)对象的一个方法,它直接作用于原列表上,...

    Python3实现对列表按元组指定列进行排序的方法分析

    Python中有2个排序函数,一个是list内置的sort()方法,另一个是全局的sorted()方法 sorted(iterable,key=None,reverse=False) #返回排好序的新列表,不改变对象本身,默认升序;reverse:-True降序 -False 正序对所有可...

    Python sorted对list和dict排序

    在Python中,`sorted()` 是一个内置函数,用于对可迭代对象(如列表、元组、字典等)进行排序,并返回一个新的排序后的列表。该函数不仅可以处理简单的数据类型,还能处理复杂的对象,比如字典和自定义类。 #### 二...

    Python中的sort()方法使用基础教程.pdf

    这个方法有两种形式:一种是内置的`list.sort()`方法,另一种是内置的`sorted()`函数。它们都可以接受可迭代对象(如列表)作为输入,但`list.sort()`直接在原列表上进行排序,而`sorted()`则返回一个新的已排序的...

    Python3 中sorted() 函数的用法

    在Python3中,`sorted()`函数是一个非常实用的工具,用于对各种可迭代对象进行排序。这个函数不仅可以处理列表(list),还能处理元组(tuple)、字符串(str)以及任何实现了迭代器协议的对象。它的主要功能是返回...

    Python基础教程:常用函数整理.pdf

    例如,当你有一个存储在字符串变量 `str_list` 中的JSON或Python列表,如 "[1838, 13735, 8285, 35386]",你可以使用 `literal_eval()` 将其转换为实际的Python列表 `mylist`,这在处理用户输入或者从文本文件读取...

Global site tag (gtag.js) - Google Analytics