python 之sorted

排序算法

排序也是在程序中经常用到的算法。无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小。如果是数字,我们可以直接比较,但如果是字符串或者两个dict呢?直接比较数学上的大小是没有意义的,因此,比较的过程必须通过函数抽象出来。

Python内置的sorted()函数就可以对list进行排序:

>>> sorted([36, 5, -12, 9, -21])
[-21, -12, 5, 9, 36]

此外,sorted()函数也是一个高阶函数,它还可以接收一个key函数来实现自定义的排序,例如按绝对值大小排序:

>>> sorted([36, 5, -12, 9, -21], key=abs)
[5, 9, -12, -21, 36]

key指定的函数将作用于list的每一个元素上,并根据key函数返回的结果进行排序。对比原始的list和经过key=abs处理过的list:

list = [36, 5, -12, 9, -21]

keys = [36, 5,  12, 9,  21]

然后sorted()函数按照keys进行排序,并按照对应关系返回list相应的元素:

keys排序结果 => [5, 9,  12,  21, 36]
                |  |    |    |   |
最终结果     => [5, 9, -12, -21, 36]

我们再看一个字符串排序的例子:

>>> sorted([‘bob‘, ‘about‘, ‘Zoo‘, ‘Credit‘])
[‘Credit‘, ‘Zoo‘, ‘about‘, ‘bob‘]

默认情况下,对字符串排序,是按照ASCII的大小比较的,由于‘Z‘ < ‘a‘,结果,大写字母Z会排在小写字母a的前面。

现在,我们提出排序应该忽略大小写,按照字母序排序。要实现这个算法,不必对现有代码大加改动,只要我们能用一个key函数把字符串映射为忽略大小写排序即可。忽略大小写来比较两个字符串,实际上就是先把字符串都变成大写(或者都变成小写),再比较。

这样,我们给sorted传入key函数,即可实现忽略大小写的排序:

>>> sorted([‘bob‘, ‘about‘, ‘Zoo‘, ‘Credit‘], key=str.lower)
[‘about‘, ‘bob‘, ‘Credit‘, ‘Zoo‘]

要进行反向排序,不必改动key函数,可以传入第三个参数reverse=True

>>> sorted([‘bob‘, ‘about‘, ‘Zoo‘, ‘Credit‘], key=str.lower, reverse=True)
[‘Zoo‘, ‘Credit‘, ‘bob‘, ‘about‘]

从上述例子可以看出,高阶函数的抽象能力是非常强大的,而且,核心代码可以保持得非常简洁。

小结

sorted()也是一个高阶函数。用sorted()排序的关键在于实现一个映射函数。

时间: 2024-08-06 23:38:23

python 之sorted的相关文章

python基础——sorted()函数

python基础——sorted()函数 排序算法 排序也是在程序中经常用到的算法.无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小.如果是数字,我们可以直接比较,但如果是字符串或者两个dict呢?直接比较数学上的大小是没有意义的,因此,比较的过程必须通过函数抽象出来. Python内置的sorted()函数就可以对list进行排序: >>> sorted([36, 5, -12, 9, -21]) [-21, -12, 5, 9, 36] 此外,sorted()函数也是一个

Python sorted

sorted函数: iterable:是可迭代类型;cmp:用于比较的函数,比较什么由key决定,有默认值,迭代集合中的一项;key:用列表元素的某个属性和函数进行作为关键字,有默认值,迭代集合中的一项;reverse:排序规则. reverse = True 或者 reverse = False,有默认值.返回值:是一个经过排序的可迭代类型,与iterable一样. 注: 一般来说,cmp和key可以使用lambda表达式. 使用方法: 1.只有一个参数, 即需要排序的变量 2.使用rever

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

python 中 sorted() 和 list.sort() 的用法

今天用python自带的sorted对一个列表进行排序, 在这里总结一下 只要是可迭代对象都可以用sorted . sorted(itrearble, cmp=None, key=None, reverse=False) =号后面是默认值 默认是升序排序的, 如果想让结果降序排列,用reverse=True 最后会将排序的结果放到一个新的列表中, 而不是对iterable本身进行修改. eg: 1, 简单排序 sorted('123456')  字符串 ['1', '2', '3', '4',

python的sorted排序详解

排序,在编程中经常遇到的算法,我也在几篇文章中介绍了一些关于排序的算法.有的高级语言内置了一些排序函数.本文讲述Python在这方面的工作.供使用python的程序员们参考,也让没有使用python的朋友了解python.领略一番"生命有限,请用Python"的含义. 内置函数sorted()/list.sort()的使用 简单应用 python对list有一个内置函数:sorted(),专门用于排序.举例: >>> a=[5,3,6,1,9,2] >>&

python中sorted函数的理解(对list列表排序,对dict字典排序)

在python手册中: sorted(iterable[,cmp,[,key[,reverse=True]]]) 作用:Return a new sorted list from the items in iterable. 第一个参数是一个iterable,返回值是一个对iterable中元素进行排序后的列表(list). 可选的参数有三个,cmp.key和reverse. 1)cmp指定一个定制的比较函数,这个函数接收两个参数(iterable的元素),如果第一个参数小于第二个参数,返回一个

python的sorted相关

Python 字典排序 在python里,字典是内置的数据类型,是个无序的存储结构,每一个元素是key-value对: >>> d {9: 'xinzhou', 3: 'chen', 5: 'wuhan', 1: 'yadan'} >>> ss=sorted(d.items(),key=lambda d:d[0]) #主要看这里 >>> ss [(1, 'yadan'), (3, 'chen'), (5, 'wuhan'), (9, 'xinzhou'

python排序sorted与sort比较

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

Python中sorted()方法的用法

1.先说一下iterable,中文意思是迭代器. Python的帮助文档中对iterable的解释是:iteralbe指的是能够一次返回它的一个成员的对象.iterable主要包括3类: 第一类是所有的序列类型,比如list(列表).str(字符串).tuple(元组). 第二类是一些非序列类型,比如dict(字典).file(文件). 第三类是你定义的任何包含__iter__()或__getitem__()方法的类的对象. 2.Python帮助文档中对sorted方法的讲解: sorted(i