python中的排序

发布时间:2017-09-13 12:41:32
python中的排序 1.基本概念 1.1Pyhton 中的List排序

在Python中有两个排序函数,sort 和 sorted.下面我们一点点深入下去看看这两个函数怎么使用。

sorted 是Python的内建函数。
使用的方法:

sorted(data, cmp=None, key=None, reverse=False)

默认的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 会处理多次.

假设有一个List : aa=[9,2,1,4,6,7,8,0,3]

先来看看这两个排序函数的功效:

1.从小到大排序

python中的排序

我们使用sort函数给aa 这个list 从小到达排序,我们输出结果可以看到这个链表已经排序好了。但是注意: 这个函数是不能改变链表本身的,所以我们输出链表看看结果,发现还是一样的。 如果我们不想改变原始list的值,我们可以采用这种方法。

2.从大到小排序

python中的排序

我们使用上面这个方法可以使用逆向排序,注意原始链表还是不会发生变化。

如果我们想让这个链表直接发生变化,我们可以使用sort在链表上进行操作,这样可以直接导致我们的链表发生变化。

1.从小到大排序

python中的排序


图一


图二

reverse=False也表示是从小到大排序。

图一和图二的效果是一样的。

2.从大到小排序

python中的排序

注意:
python 中的sort是不能对tuple类型的元素进行排序的,因为我们知道元组是不可以改变的。我们可以用sorted作用在我们的元组上,但是最后得到的结果的一个list

1.2Pyhton 中字典的排序 1.2.1 lambda

我们在对字典进行排序的时候,我们需要借助lambda,它实际上是一个匿名函数

它的一般形式:

lambda arguments: expression

写成函数形式就是

def (arguments): return expression

当lambda和sorted()的key [sorted(iterable[,key][,reverse])]结合在一起,会有很多神奇的化学反应。

1.2.2 对字典的key进行排序

如果我们直接使用sorted作用在我们的字典上面,实际上就是对我们的key键进行排序。

python中的排序

dic = {'c': 1, 'b': 2, 'a': 3} print(sorted(dic)) # ['a', 'b', 'c']

这个时候我们来看看我们排序之后的字典是什么样子的

python中的排序

字典的顺序竟然发生了变化

我们在试试下面逆向排序的结构是什么样子的:

print(sorted(dic, reverse=True)) # ['c', 'b', 'a']

python中的排序

可是这里只有键的排序发生了变化,但是我们再次查看我们的字典,纳尼,竟然没有变化??为什么一会有变化一会又没有变化?不懂了,跪求各位大神帮忙解释一下。

也有可能是字典的排序本来就是不按规则来的。但是每次都出现这种巧合?why??

1.2.3 对字典的其他排序方法 1.2.3.1 使用lambda

刚才说了我们可以使用lambda对我们的字典进行排序,但是这个会有个副作用,那就是排序之后我们的字典会变成字典和元组的嵌套.

我们来看一下下面的这个例子。

首先说明一点,我们使用lambda的时候既可以对我们的字典的key进行排序,也可以对values进行排序。

python中的排序

还是严格按照我们sorted的定义来看结合lambda

我们的字典是dic = {‘a’: 3, ‘b’: 2, ‘c’: 1}

我们来看这个排序语句是什么意思:

sorted(dic.items(), key=lambda x: x[0])

我们结合我们的sorted的定义来看:

sorted(data, cmp=None, key=None, reverse=False)

企业建站2800元起,携手武汉肥猫科技,做一个有见地的颜值派!更多优惠请戳:武汉网站设计公司 http://www.45qun.com