ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Python排序函数用法

Python排序函数用法 这篇文章里面的文字还有那些图片都是从各个网站上找来的, 大家拿过去看看学习或者私下聊聊感想就行, 千万别拿去搞什么赚钱的商业活动。要是上面有哪里弄错了, 或者有啥问题, 麻烦赶紧联系我们, 我们会好好解决处理的。排序这个函数, 它是把语言的简洁给完美体现出来了。对于那个叫做List对象的对象来说, 咱们可以直接去调用sort()这个函数, 当然了, 这里要是说是方法是更为合适的。而对于其他的, 比如说像set啊或者是dict啊这种的, 咱们叫它什么可迭代对象, 针对这些对象, 咱们是可以使用更加灵活的, 那个带括号的()函数的。一.List的sort()函数那个叫做源码的文件,它里面的py文件, 这样写出来, sort这个函数的具体定义在下面这里。def sort(self, keyNone, reverseFalse): L.sort(keyNone, reverseFalse) - None -- stable sort *IN PLACE* pass从实际情况来看, sort()函数是没有返回值的, 它包含两个参数。其中, key这个参数是用来指定用于排序的依据的函数的。另一个参数是用来表示是否需要将列表进行反转操作的, 如果不设置的话是默认为False的, 此时的意思就是按照升序排列的方式来进行处理。如果是被设定为True的话, 那么其意义就是指要进行降序排列的操作。关于sort()这个函数的用法, 具体表现如下。L [1, 2, 7, 4, 3]L.sort()print(L)#[1, 2, 3, 4, 7]我们可以往里面添加一些参数来进行查看, 就比如说是降序排序这样的情况。L [1, 2, 7, 4, 3]L.sort(reverseTrue)print(L)#[7, 4, 3, 2, 1]另外拿个具体的情况来说, 就是如果我们希望借助key这个手段去实现将数据按照降序的方式进行排列动作的话, 那么这里是需要运用一下匿名函数这种方式来完成的。L [1, 2, 7, 4, 3]L.sort(keylambda x : x*(-1))print(L)#[7, 4, 3, 2, 1]当然, key 这个词还有好多种别的用法, 我们是可以把它设置成那个已经存在的内置的那个函数, 或者是自己定义的函数, 比如说去用一下那个绝对值函数:L [-1, 2, -7, 4, 3]L.sort(keyabs)print(L)#[-1, 2, 3, 4, -7]还有一种另外的一种对于key的支持方式, 就是通过模块里面的函数, 将传统的cmp函数转为key, 这和函数的用法是类似的, 但是对于比较的逻辑比较复杂的情况, 这样的方式会更清晰更便于维护。from functools import cmp_to_keyL [-1, 2, -7, 4, 3]def cmp(a,b):if abs(a) abs(b):return -1else:return 1L.sort(keycmp_to_key(cmp))print(L)二.()与sort()函数相比, 这个函数要通用得多。因为sort()函数仅仅能够对列表进行排序。对于此函数的详细解释, 可以在官方文档中查到。sorted(iterable, *, keyNone, reverseFalse)Return a new sorted list from the items in iterable.这个方法的返回值是List类型。参数列表表示的是一个可迭代对象。星号表示位置参数就此结束。后面的参数都必须使用关键字来指定。key参数与之前参数用法和sort()方法完全一致。具体的使用方法, 展示如下所示:L [1, 2, 7, 4, 3]L1 sorted(L)print(L1)#[1, 2, 3, 4, 7]至于与关键的排序用法, 此处就不再做单独的示例展示, 大家可以去参考sort(()函数的具体用法。假如我们当前想要实施排序操作的主体数据是一个集合格式的数据, 那么其具体的使用步骤与方法同列表数据排序时的操作要求保持高度一致。S {1, 2, 7, 4, 3}S1 sorted(S)print(S1)#[1, 2, 3, 4, 7]请大家一定要注意到, 这个用来进行排序的目标对象是set类型数据, 而最终的返回结果却是一个list类型数据, 这是因为set类型的本身上面压根就不存在所谓的排序概念。那么, 如果咱们想要去实现一个相对要复杂一些点的排序功能该怎么办呢?比如要对字典这样的数据进行排序, 此时我们规定的排序依据是来自于键名方面, 而得出的最终排序结果则是从由键名和具体数值共同组成的键值对这个集合所构成的列表里面挑选出来的形式展现的。Dict {a:2, b:3, c:7, d:4, e:1}L sorted(Dict.items(), keylambda x : x[1])print(L)#[(e, 1), (a, 2), (b, 3), (d, 4), (c, 7)]最后给出一个叫做上题的题目, 它的题目内容是关于根据字符出现的频率来进行排序的, 具体如下:给定一个字符串请将字符串里的字符按照出现的频率降序排列。输入:tree输出:eert解释:e出现两次r和t都只出现一次。因此e必须出现在r和t之前。此外eetr也是一个有效的答案。通过使用函数, 代码就变得非常清晰且易于阅读了:def frequencySort(s):d {}for i in s:d[i] d.get(i,0) 1L sorted(d.keys(), keylambda x: d[x], reverseTrue)s for i in L:s i * d[i]return s需要注意的一个要点在于, 这里提到的d.keys()所生成的结果, 实际上是一个由各个key构成的可迭代对象, 与此同时, 在前面那段代码当中所使用的Dict.items(), 它生成的是另一个由键值对对象组成的可迭代对象, 而这个所谓的键值对对象, 具体而言是指一个Tuple对象。您只需要给相关的负责人私下发送一条包含数字01的消息, 这样你就可以拿到非常非常多的学习资源。
返回列表