python,如何理解sorted函数?如何做数据排序?
发布于 作者:苏南大叔 来源:程序如此灵动~

在苏南大叔的视角里面,python
主要是处理各种数据。这里就存在着数据的排序问题,排序的方式也很多。本文主要讨论使用sorted
函数进行排序的可能性。

大家好,这里是苏南大叔的程序如此灵动博客,这里记录苏南大叔和计算机代码的故事。本文主要描述python
的sorted
函数,解决的是python
的数据排序问题。测试环境:win10
,python@3.6.8
。本文涉及的函数,默认下都是倒序的。如果想要得到正序排序的结果,请添加“reverse=True”参数。
sorted
之基础操作
对于普通数组成员的排序,这个sorted
函数是非常好理解的。
对于字符串和数字混合的数组,这个sorted
函数就报错了。
需要自定义一个比较函数,也就是key
参数,里面使用了一个特殊的拉姆达表达式。比如:
个人是这么理解这个拉姆达表示式的,传入x
(冒号前),然后进行强制类型转化,然后就可以进行普通的排序了。

sorted
之迷幻操作
迷幻操作,依然出自这个sorted
函数的key
参数。来看下面的两个key
,猛一看上去,应该得出相反的结果。结果,还是一样的结果。因为修改的比较标准是大小写,并不影响比较的结果。
运行结果是:
sorted
之拉姆达表达式单keyx[1]
x:x[]
字母可以随意修改,写啥都行。个人理解着,就是个变量的表示方法。冒号前表示输入,冒号后表述输出。输出项目就是排序的标准。
第一种情况,成员都是字符串
那么,x[0]
表示字符串的第一个字母。x[1]
表示字符串的第二个字母。
运行结果是:
最后一个x[3]
出错的原因是:big
这个字符串,x[3]
索引越界了。
第二种情况,成员是tuple
这个成员是个tuple
,那么,x[0]
表示的是tuple
里面的第一个成员,都是字符串类型。x[1]
表示的是第二个成员,都是数字类型。x[2]
表示的第三个成员,不存在,数组索引越界。
运行结果是:
sorted
之拉姆达表达式多key
这个是个以元组(姓名,成绩,年龄)为元素的数组,这里的自定义规则就是,成绩高的排前面,成绩相同,就比较年领,然后是比较姓名。
sorted
之兼容升级cmp_to_key
更复杂版本的sorted
,就是自定义key
为一个函数了,这种情况下,可以传入两个参数x
,y
。值得注意的是:本文的测试环境是:python@3.6.8
。python3
下的sorted
函数没有cmp
参数,只有一个key
参数。如果想自定义函数,那么,就需要使用functools
下面的cmp_to_key
函数,对函数进行一个转换。
这里的运行结果是:
上面的代码中,拉姆达表达式和这个自定义函数表达的是同一个逻辑。这里的实际逻辑,比较复杂。所以,苏南大叔会在后续文章里面,再做补充说明。
sorted()
对比.sort()
对比sorted()
函数,还存在着一个.sort()
方法。就是把sorted()
函数的第一个参数放在了.sort()
前面,另外两个参数不变。范例代码:
对比.sort()
:
函数、方法 | 原变量 | 返回值 |
---|---|---|
obj2 = sorted(obj,key,reverse) | 不变 | 排序后返回 |
obj.sort(key,reverse) | 被覆盖 | 无返回值 None |
相关链接
- https://newsn.net/say/css-important.html
- https://newsn.net/say/js-localecompare.html
- https://newsn.net/say/python-tuple.html
- https://newsn.net/say/python-slice-join.html
- https://newsn.net/say/software-version.html
- https://newsn.net/say/centos-find-bigfile.html
总结
更多python
相关文章,请点击下面的链接:


