Python——itertools.chain.from_iterable将多个迭代器连接成一个统一的迭代器的最高效的方法
1 致谢
感谢网友“-柚子皮-”的帮助,
原文链接如下:
https://blog.csdn.net/pipisorry/article/details/45171451
感谢 Python Software Foundation的指导,
Python官方doc的链接如下:
https://docs.python.org/zh-cn/3/library/itertools.html#itertools.chain.from_iterable
2 前言
今天在阅读Detectron2的示例代码时,看到他们用了一个这样的语句做迭代器的链接:
# 上面是一些其他的标注信息的赋值代码……
annos = v["regions"]
objs = []
for _, anno in annos.items():assert not anno["region_attributes"]anno = anno["shape_attributes"]px = anno["all_points_x"]py = anno["all_points_y"]poly = [(x + 0.5, y + 0.5) for x, y in zip(px, py)]poly = list(itertools.chain.from_iterable(poly))# 这里使用itertools.chain.from_iterable来将poly列表转换为一个chain迭代器obj = {"bbox": [np.min(px), np.min(py), np.max(px), np.max(py)],"bbox_mode": BoxMode.XYXY_ABS,"segmentation": [poly],"category_id": 0,"iscrowd": 0}objs.append(obj)
record["annotations"] = objs
dataset_dicts.append(record)
我感觉挺奇怪的,于是就查了一下,后来发现这是一种比较高效的连接多个迭代器的方法~
3 使用itertools.chain.from_iterable将多个迭代器进行高效的连接
3.1 itertools.chain.from_iterable的作用
itertools.chain.from_iterable可以用来连接多个迭代器,我们可以看看官方文档给出的介绍,
可以看到他可以连接两个迭代器'ABC'和'DEF'
其中输入参数iterables是多个迭代器的list类型,
3.2 将多个迭代器进行高效的连接
官方文档在sum(iterable, /, start=0)的描述中也建议到:
To concatenate a series of iterables, consider using
itertools.chain()
.
其实这样做的原因我们在3.1中就看到,也就是“从一个单独的可迭代参数中得到链式输入,该参数是延迟计算的。”,说明这里使用的是懒汉式的读取模式,所以在一定程度上可以提高读取数据的效率,因为不用一开始就获得整个的list,这也是iterable类型的优势之一;
3.3 备注
使用itertools.chain.from_iterable会使代码变得清晰易懂
感觉使用itertools.chain.from_iterable的可读性比使用sum(iterable, /, start=0)的可读性要高一些;
Python——itertools.chain.from_iterable将多个迭代器连接成一个统一的迭代器的最高效的方法相关推荐
- Python Itertools.chain()用法【将一组迭代对象串联起来,形成一个更大的迭代器】
它是一个需要一系列可迭代对象并返回一个可迭代对象的函数.它将所有可迭代对象组合在一起,并生成一个可迭代对象作为输出. 场景一: chain()可以把一组迭代对象串联起来,形成一个更大的迭代器: &g ...
- Python itertools chain
v1 = [11,22,33] v2 = [44,55,66]new = chain(v1,v2) for item in new:print(item) from itertools import ...
- Python itertools 部分用法
过滤的部分用法 import itertoolsdef vowel(c):return c.lower() in 'aeiou'name = 'Aardvark'print(list(filter(v ...
- python itertools 使用详解
文章目录 (一)itertools 的所有函数说明 无穷迭代器包含的 函数列表 1.count( start [,step]) 2.cycle( iterable ) 3.repeat( elem [ ...
- python chain.from_iterable()
该函数chain.from_iterable()属于终止迭代器类别.此函数以单个iterable作为参数,并且输入iterable的所有元素也应该是可迭代的,并且他返回包含输入iterable的所有元 ...
- python itertools模块chain函数功能详解 itertools.chain(*iterable)
Itertools模块, itertools提供了高效快捷的用于操作迭代对象的函数.通过使用这个模块,可以简化代码. Itertools.chain语法 Itertools.chain(*iterab ...
- python技巧(1)--如何转换itertools.chain对象为数组
总第 115 篇文章,本文大约 900 字,阅读大约需要 3 分钟 之前做1月总结的时候说过希望每天或者每2天开始的更新一些学习笔记,这是开始的第一篇. 这篇介绍的是如何把一个 itertools.c ...
- Python -itertools模块combinations方法
itertools模块combinations(iterable, r)方法可以创建一个迭代器,返回iterable中所有长度为r的子序列,返回的子序列中的项按输入iterable中的顺序排序. 例1 ...
- python itertools模块_Python标准模块--itertools
1 模块简介 Python提供了itertools模块,可以创建属于自己的迭代器.itertools提供的工具快速并且节约内存.开发者可以使用这些工具创建属于自己特定的迭代器,这些特定的迭代器可以用于 ...
最新文章
- Mysql优化之开山篇
- php ip处理函数,PHP取ip地址函数
- docker版本Mysql安装
- 对阵Flash 实战HTML 5技巧之页面设计
- python3爬虫-通过requests爬取图虫网
- 索引 2 超出范围。_重点推荐:音响灯光行业搜索引擎推广教学
- SD-WAN技术分析
- mysql 索引 hash_Mysql中索引类型,B-tree、Hash索引怎么实现的以及其特点?
- Transact-SQL 存储过程(c#调用执行)
- 如何摆脱工具类【转载】
- word转换html 批量,Word批量转HTML工具
- 计算机网络第8版课后习题答案整理
- 口布杯花的60种叠法_10种餐巾折花杯花的步骤用文字解说怎么折
- 网易邮箱登录php,PHP模拟登陆163邮箱发邮件及获取通讯录列表的方法
- Win10喇叭图标出现红叉提示未安装任何音频输出设备
- vlc搭建流媒体转发服务器
- MySQL联合主键保存_mysql联合主键
- Kali Linux系统正确安装指南教程(一)MAC安装kail+Vmware Fusion详细教程(吐血本人测试10次)
- 如何解决微信端不能直接跳转浏览器
- 全球及中国浆液阀行业市场深度分析及发展战略咨询报告2022-2028年