前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python复杂排序闯5关,你能闯到第几关?

Python复杂排序闯5关,你能闯到第几关?

作者头像
咋咋
发布2023-02-09 19:16:34
6720
发布2023-02-09 19:16:34
举报
文章被收录于专栏:数据大宇宙数据大宇宙

前言

python 中对集合执行排序是非常简单。

那希望按文本长度排序,把长的文本排到后面,如何做到?

元素是复杂的结构,比如字典。如何按分数降序排序?

需要同时对多个字段排序呢?

对多个字段,应用不同的升降序排序呢?

最后,怎么定义出类似 pandas 的排序函数?

今天我将带大家闯过这些关卡,当然也会讲解其中的关键技巧。 超级干货,一键三连再观看~

视频版本:http://mpvideo.qpic.cn/0bc3quaaaaaayyaajbux3nrvbbodaccqaaaa.f10002.mp4?dis_k=74afb47e961f3a89b02b7991a668cd8a&dis_t=1675941315&play_scene=10400&vid=wxv_2705311665973903361&format_id=10002&support_redirect=0&mmversion=false


第一关,普通元素排序。

这里主要为了简单了解 sorted 函数的使用。

  • 第一个参数指定排序的集合
  • 参数 reverse 可以指定是否降序

第二关,把文本较长的放在后面

  • 通过参数 key ,可以指定排序规则。
  • 这里指定函数 len ,就可以做到按文本长度排序。

为了帮助大家理解它的过程,我把数据变成表格。

  • 行3:设置 sorted 函数的参数 key,相当于为表格添加辅助列,计算出名字的长度值。
  • 行4:对 key 列排序

最后取出名字列

后面,我们会看到使用自定义函数指定更复杂的规则


第三关,复杂结构排序

当 python 无法确定元素的排序规则时,就需要设置参数 key。

  • 这个例子中,需要从每个字典中取出分数,
  • 设置参数 key 为一个简单的 lambda 表达式。
  • 表达式中的 x ,就是列表中的每个字典。
  • 设置参数 reverse 指定为降序

第四关,多列排序

这里需要同时对分数和年龄进行降序排序。

  • 同样,需要设置参数 key ,但 lambda 表达式中到底要返回什么呢?

此时,我们可以利用元组的特性,每个元组比较的时候,都会从左到右顺序比较。

  • 可以看到结果中的这两行,同样的分数,年龄高的被排到前面

第五关,多列,不同升降序

这一关最难了。

这里与前一关唯一不同的是,当分数相同时,需要把年龄小的排到前面。但是我们无法使用上一关的代码做到。这是因为 元组的比较规则是固定 的。

要解决这个问题,我们需要简单了解 python 稳定排序的意思。

首先,只对分数进行排序。

  • 现在只看这两行记录。可以看到,不管是升序还是降序排序,排序规则中的值,如果无法分出高低时,那么 python 会确保这两笔记录,仍然保持原来的前后顺序。

这就是稳定排序的意义所在。

利用稳定排序的特性,我们可以把规则反方向执行。

  • 首先,只对年龄执行升序排序。
  • 注意分数相同的2笔记录,他们现在的前后次序是符合要求的。
  • 行13:对结果再次按分数降序排序。
  • 由于 排序稳定性 年龄小的记录不会因为这次排序,改变它的位置

因此,当需要多列应用不同的升降序规则时,要反方向划分多个步骤执行


这也太麻烦了。熟悉 pandas 的小伙伴,一定会选择利用表格排序做到要求。可以看到通过一个参数 ascending ,指定多个不同升降序。多方便呀

其实,我们也可以用自定义函数做到。

使用的时候很简单:

这里的参数 key 之所以要求使用 item getter 函数,是为了可以兼容其他对象的排序。以后有机会再展开讲解这方面的应用吧。

本文参与?腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-12-15,如有侵权请联系?cloudcommunity@tencent.com 删除

本文分享自 数据大宇宙 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 第一关,普通元素排序。
  • 第二关,把文本较长的放在后面
  • 第三关,复杂结构排序
  • 第四关,多列排序
  • 第五关,多列,不同升降序
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com