首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用迭代器工具 itertools 来提高工作效率

Python 标准库模块 itertools 提供了很多方便灵活的迭代器工具,熟练的运用可以极大的提高工作效率。

无限迭代器

itertools.count

创建一个迭代器,生成从 n 开始的连续整数,如果忽略 n,则从 0 开始计算。示例:

itertools.cycle

把传入的一个序列无限重复下去。示例:

itertools.repeat

创建一个迭代器,重复生成 object,times(如果已提供)指定重复计数,如果未提供 times,将无止尽返回该对象。示例:

函数式工具

itertools.ifilter、itertools.reduce、itertools.imap、itertools.izip

与内建函数 、、、 有同样的功能,只是返回一个迭代器而不是一个序列。在 Python3 中被去掉,因为默认的内建函数就是返回一个迭代器。

itertools.ifilterfalse

python3 为:

与 filter 类似,但仅生成 sequence 中 function(item) 为 False 的项。示例:

itertools.izip_longest

Python3 为:

与 zip 类似,但不同的是它会把最长的 iter 迭代完才结束,其他 iter 如果有缺失值则用 fillvalue 填充。示例:

itertools.starmap

对序列 sequence 的每个元素作为 function 的参数列表执行,即 , 返回执行结果的迭代器。只有当 iterable 生成的项适用于这种调用函数的方式时,此函数才有效。示例:

itertools.dropwhile

创建一个迭代器,只要函数 predicate(item) 为 True,就丢弃 iterable 中的项,如果 predicate 返回 False,就会生成 iterable 中的项和所有后续项。即在条件为false之后的第一次, 返回迭代器中剩下来的项。示例:

itertools.takewhile

与 dropwhile 相反。创建一个迭代器,生成 iterable 中 predicate(item) 为 True 的项,只要 predicate 计算为 False,迭代就会立即停止。示例:

组合工具

itertools.chain

把一组迭代对象串联起来,形成一个更大的迭代器。示例:

itertools.product

创建一个迭代器,生成多个迭代器集合的笛卡尔积,repeat 参数用于指定重复生成序列的次数。示例:

itertools.permutations

返回 iterable 中任意取 r 个元素做排列的元组的迭代器,如果不指定 r,那么序列的长度与 iterable 中的项目数量相同。示例:

itertools.combinations

与 permutations 类似,但组合不分顺序,即如果 iterable 为 "abc",r 为 2 时,ab 和 ba 则视为重复,此时只放回 ab. 示例:

itertools.combinations_with_replacement

与 combinations 类似,但允许重复值,即如果 iterable 为 "abc",r 为 2 时,会多出 aa, bb, cc. 示例:

其他工具

itertools.compress

相当于 bool 选取,只有当 selectors 对应位置的元素为 true 时,才保留 data 中相应位置的元素,否则去除。示例:

itertools.groupby

对 iterable 中的元素进行分组。keyfunc 是分组函数,用于对 iterable 的连续项进行分组,如果不指定,则默认对 iterable 中的连续相同项进行分组,返回一个 (key, sub-iterator) 的迭代器。示例:

注意,注意,注意:必须先排序后才能分组,因为 是通过比较相邻元素来分组的。可以看第二个例子,因为 a 和 f 没有排在一起,所以最后没有分组到同一个列表中。

itertools.islice

切片选择,start 是开始索引,stop 是结束索引,step 是步长,start 和 step 可选。示例:

itertools.tee

从 iterable 创建 n 个独立的迭代器,以元组的形式返回。示例:

参考文档:

http://blog.konghy.cn/2017/04/25/python-itertools/

https://juejin.im/post/5af56230f265da0b93485cca#heading-15

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200915A0NKR500?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券