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的用法与区别导致程序一直报错,找了好久才知道是使用方法错误的问题!现在就大致的归纳一下sort和sorted的用法与区别 1. sort: sort是Python中列表的方法 sort()...
简单记一下python中List的sort方法(或者sorted内建函数)的用法。 List的元素可以是各种东西,字符串,字典,自己定义的类等。 sorted函数用法如下: sorted(data, cmp=None, key=None, reverse=False) 其中,...
Python3中sorted()函数与lambda表达式原理解析相信很多小伙伴们在一开始学习Python的一些高级用法时遇到过很多困扰。我准备日常分享一些比较浅显的原理解析帮助大家理解。博主的原文:lambda表达式sorted()函数目录...
在Python编程语言中,`sorted()`函数和`list.sort()`方法是两个非常重要的工具,用于对数据进行排序。它们在处理列表和其他可迭代对象时,提供了便利的方式,使得数据能够按照特定顺序排列。这里我们将详细探讨这两...
SortedList是Python中的一个有序列表,它扩展了Python的内置list类型,提供了额外的排序功能。SortedList会自动保持其元素的排序状态,无论是插入新元素还是删除现有元素,它都会立即进行调整。这在需要频繁地对列表...
python语言中的列表排序方法有三个:reverse反转/倒序排序、sort正序排序、sorted可以获取排序后的列表。在更高级列表排序中,后两中方法还可以加入条件参数进行排序。 reverse()方法 将列表中元素反转排序,比如...
Python中的sort()方法用于数组排序,本文以实例形式对此加以详细说明: 一、基本形式 列表有自己的sort方法,其对列表进行原址排序,既然是原址排序,那显然元组不可能拥有这种方法,因为元组是不可修改的。 x = ...
sorted是Python的内建函数相同的参数,用built-in函数sorted进行排序 sorted(iterable,key=None,reverse=False),返回新的列表,对所有可迭代的对象均有效 sort(key=None,reverse=False) 就地改变列表 reverse:Tru
输出结果:sorted() 函数和 sort() 函数是有区别的:sort() 是应用在列表 list 上的方法,而 sorted 可以对所有可迭代的对象进行排序操作。列表 list 的 sort() 方法返回的是对已经存在的列表进行操作,而内置函数 ...
Python list内置sort()方法用来排序,也可以用python内置的全局sorted()方法来对可迭代的序列排序生成新的序列 一,最简单的排序 1.使用sort排序 my_list = [3, 5, 1, 4, 2] my_list.sort() print (my_list) #输出...
在Python编程语言中,`sort`和`sorted`都是用于对序列进行排序的函数,但它们之间存在一些关键差异。本文将深入解析这两个函数的工作原理、参数以及如何使用它们进行自定义排序。 首先,我们来看`sort`函数。`sort`...
- 自Python 2.4起,`sort()` 和 `sorted()` 都引入了 `key` 参数,用于指定一个函数,该函数会在比较元素之前应用于每个元素。 - `key` 函数的返回值用于比较,而不是原始元素本身。 - 例如,使用 `key=str.lower...
本文将详细介绍Python3中的两种主要排序方法:`sort()` 和 `sorted()`,并提供丰富的示例来帮助理解这两种方法的用法。 #### 1. `sort()` 方法 `sort()` 是列表(list)对象的一个方法,它直接作用于原列表上,...
Python中有2个排序函数,一个是list内置的sort()方法,另一个是全局的sorted()方法 sorted(iterable,key=None,reverse=False) #返回排好序的新列表,不改变对象本身,默认升序;reverse:-True降序 -False 正序对所有可...
在Python中,`sorted()` 是一个内置函数,用于对可迭代对象(如列表、元组、字典等)进行排序,并返回一个新的排序后的列表。该函数不仅可以处理简单的数据类型,还能处理复杂的对象,比如字典和自定义类。 #### 二...
这个方法有两种形式:一种是内置的`list.sort()`方法,另一种是内置的`sorted()`函数。它们都可以接受可迭代对象(如列表)作为输入,但`list.sort()`直接在原列表上进行排序,而`sorted()`则返回一个新的已排序的...
在Python3中,`sorted()`函数是一个非常实用的工具,用于对各种可迭代对象进行排序。这个函数不仅可以处理列表(list),还能处理元组(tuple)、字符串(str)以及任何实现了迭代器协议的对象。它的主要功能是返回...
例如,当你有一个存储在字符串变量 `str_list` 中的JSON或Python列表,如 "[1838, 13735, 8285, 35386]",你可以使用 `literal_eval()` 将其转换为实际的Python列表 `mylist`,这在处理用户输入或者从文本文件读取...