关于zip(*sorted(zip()))操作的解释

1812-王同学

发表文章数:113

首页 » 数据科学库 » 正文

运行课程上的代码,对一个函数的某个关键操作步骤有些不解,查了一下资料,发现了

(python函数04)zip(*sorted(zip())) – 华子哈 – 博客园zip(*sorted(zip())) 用这个玩意儿可以以对两个迭代对象进行排序。 示例代码01 cnts = [2, 4, 3, 6, 5] boundingBoxes = [(730,关于zip(*sorted(zip()))操作的解释https://www.cnblogs.com/huaziha/p/14373528.html这篇博客写的东西,很有启发,在这里记录一下

这个函数的功能是在轮廓检索过程中把找到的轮廓按照相对位置进行排序的操作

import cv2

def sort_contours(cnts, method="left-to-right"):
    reverse = False
    i = 0
    if method == "right-to-left" or method == "bottom-to-top":
        reverse = True

    if method == "top-to-bottom" or method == "bottom-to-top":
        i = 1

    boundingBoxes = [cv2.boundingRect(c) for c in cnts]  # 用一个最小外接矩形将形状包起来
    (cnt, boundingBoxes) = zip(*sorted(zip(cnts, boundingBoxes), key=lambda b: b[1][i], reverse=reverse))
    
    return cnt, boundingBoxes

(cnt, boundingBoxes) = zip(*sorted(zip(cnts, boundingBoxes), key=lambda b: b[1][i], reverse=reverse))

参考上面博客的解释,并结合zip()与sorted()函数的用法

zip()函数是将两个列表对应位置的元素打包在一起,并组合成一个大列表的操作

sorted()函数中有几个参数需要注意

首先,sorted 可以对所有可迭代的对象进行排序操作,而不仅仅是列表

语法:sorted(iterable, cmp=None, key=None, reverse=False)

iterable — 可迭代对象。

cmp — 比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回 1,小于则返回 – 1,等于则返回 0。

key — 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。

reverse — 排序规则,reverse = True 降序 , reverse = False 升序(默认)。

参考来自:Python sorted() 函数 | 菜鸟教程

尝试了上面博客中的例子

关于zip(*sorted(zip()))操作的解释

zip(cnts, boundingBoxes)之后的结果应该类似[2, (730, 20, 54, 85)]

lambda b: b[1][0] 应该就是用于定位,指定sorted()函数以哪个元素进行排序,在这个例子中就是以 730 这个位置的元素进行排序,所以应该是 412, 492, 571, 651, 730 这样的顺序,当然,对应的cnts和其他元素的位置也相应的一起变。

再比如第二个例子

关于zip(*sorted(zip()))操作的解释

这里设置lambda b: b[0],就是按照 [2, (730, 20, 54, 85)]中的2这个位置的元素进行排序

其实 b 只是匿名函数lambda的“未知数”而已,这个未知数可以是x,可以是a,可以是b,什么都可以的。

未经允许不得转载:作者:1812-王同学, 转载或复制请以 超链接形式 并注明出处 拜师资源博客
原文地址:《关于zip(*sorted(zip()))操作的解释》 发布于2021-11-23

分享到:
赞(0) 打赏

评论 抢沙发

评论前必须登录!

  注册



长按图片转发给朋友

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

Vieu3.3主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录