Python迭代器模块itertools使用原理解析


Posted in Python onDecember 11, 2019

这篇文章主要介绍了Python迭代器模块itertools使用原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

介绍

今天介绍一个很强大的模块,而且是python自带的,那就是itertools迭代器模块。

使用

使用起来很简单,先导入模块

import itertools

下面,我们通过一些例子边学边练

三个无限迭代器

先告诉大家 control + C 可以强制停止程序哦

1.count()

num = itertools.count(10)
for i in num:
    print(i)
# 10
# 11
# 12
# 13
# 以此类推,无穷无尽

2.cycle()

letter = itertools.cycle('ABC')
for i in letter:
    print(i)
# A
# B
# C
# A
# B
# 依次循环,无穷无尽

3.repeat()

rp = itertools.repeat('X')
for i in rp:
    print(i)

# X
# X
# X
# 依次类推,无穷无尽

rp2 = itertools.repeat('X', 2) # 限制2次
for i in rp2:
    print(i)

# X
# X

想要限制迭代的次数还有一个办法,就是使用takewhile

num2 = itertools.takewhile(lambda x: x < 15, num)
list(num2)
# [10,11,12,13,14]

可以用来把几个迭代器合起来,构成一整个迭代器

for c in itertools.chain('AB', 'CD'):
    print(c)
# A
# B
# C
# D

groupby()

可以把重复的元素group起来

for key, group in itertools.groupby('AAABBCCB'):
    print(key, list(group))

# A ['A', 'A', 'A']
# B ['B', 'B', 'B]
# C ['C', 'C']

# 注意这里是区分大小写的,如果要忽略
# 请使用 itertools.groupby('AAABBCCB', lambda c: c.upper())

accumulate

累加

x = itertools.accumulate(range(5))
print(list(x))
# [0, 1, 3, 6, 10, 15]

tee

可以将一个迭代器拆分为n个迭代器

a = [1,2,3,4,5]
x1, x2, x3 = itertools.tee(a,3)

# 产生了三个元素和a一样的iter

combinations

求列表或生成器中指定数目的元素不重复的所有组合

x = itertools.combinations(range(4), 3)
print(list(x))
# [(0, 1, 2), (0, 1, 3), (0, 2, 3), (1, 2, 3)]

compress

按照真值表筛选元素

x = itertools.compress(range(5), (True, False, True, True, False)) # 0,1,2,3,4,5
print(list(x))
# [0, 2, 3]

filterfalse

保留对应真值为False的元素

x = itertools.filterfalse(lambda n: n < 5, (1, 2, 5, 3, 7, 10, 0))
print(list(x))
# [5, 7, 10]

islice

对迭代器进行切片,参数分别是iter,start,end, step

x = itertools.islice(range(10), 0, 9, 2)
print(list(x))
# [0, 2, 4, 6, 8]

product

产生类似笛卡尔积

x = itertools.product('ABC', range(3))
print(list(x))
# [('A', 0), ('A', 1), ('A', 2), ('B', 0), ('B', 1), ('B', 2), ('C', 0), ('C', 1), ('C', 2)]

zip_longest(*iterables, fillvalue=None)

创建一个迭代器,从每个可迭代对象中收集元素。如果可迭代对象的长度未对齐,将根据 fillvalue 填充缺失值。迭代持续到耗光最长的可迭代对象。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中为什么要用self探讨
Apr 14 Python
Python的Flask框架中实现登录用户的个人资料和头像的教程
Apr 20 Python
Python cookbook(数据结构与算法)让字典保持有序的方法
Feb 18 Python
Django中url的反向查询的方法
Mar 14 Python
DataFrame中的object转换成float的方法
Apr 10 Python
不管你的Python报什么错,用这个模块就能正常运行
Sep 14 Python
Python面向对象进阶学习
May 21 Python
python PyAutoGUI 模拟鼠标键盘操作和截屏功能
Aug 04 Python
python同义词替换的实现(jieba分词)
Jan 21 Python
Windows下Anaconda和PyCharm的安装与使用详解
Apr 23 Python
使用matlab 判断两个矩阵是否相等的实例
May 11 Python
2020版Python学习路线图(附学习资料)
Sep 15 Python
Python+Selenium+phantomjs实现网页模拟登录和截图功能(windows环境)
Dec 11 #Python
Python partial函数原理及用法解析
Dec 11 #Python
opencv3/python 鼠标响应操作详解
Dec 11 #Python
通过实例简单了解Python中yield的作用
Dec 11 #Python
opencv3/Python 稠密光流calcOpticalFlowFarneback详解
Dec 11 #Python
centos7中安装python3.6.4的教程
Dec 11 #Python
python3 使用Opencv打开USB摄像头,配置1080P分辨率的操作
Dec 11 #Python
You might like
IIS6+PHP5+MySQL5+Zend Optimizer+phpMyAdmin安装配置图文教程 2009年
2009/06/08 PHP
让Nginx支持ThinkPHP的URL重写和PATHINFO的方法分享
2011/08/08 PHP
php中删除字符串中最先出现某个字符的实现代码
2013/02/03 PHP
php使用 readfile() 函数设置文件大小大小的方法
2017/08/11 PHP
thinkphp5.0自定义验证规则使用方法
2017/11/16 PHP
详解PHP 7.4 中数组延展操作符语法知识点
2019/07/19 PHP
一段多浏览器的&quot;复制到剪贴板&quot;javascript代码
2007/03/27 Javascript
prototype Element学习笔记(篇一)
2008/10/26 Javascript
基于jquery的防止大图片撑破页面的实现代码(立即缩放)
2011/10/24 Javascript
js Form.elements[i]的使用实例
2011/11/13 Javascript
调试Node.JS的辅助工具(NodeWatcher)
2012/01/04 Javascript
jQuery层次选择器选择元素使用介绍
2013/04/18 Javascript
JavaScript和CSS通过expression实现Table居中显示
2013/06/28 Javascript
jquery中页面Ajax方法$.load的功能使用介绍
2014/10/20 Javascript
jQuery快速高效制作网页交互特效
2017/02/24 Javascript
Vue非父子组件通信详解
2017/06/12 Javascript
JavaScript如何获取到导航条中HTTP信息
2017/10/10 Javascript
nodejs+mongodb+vue前后台配置ueditor的示例代码
2018/01/02 NodeJs
使用Vue-cli 3.0搭建Vue项目的方法
2018/06/07 Javascript
element ui table(表格)实现点击一行展开功能
2018/12/04 Javascript
基于elementUI使用v-model实现经纬度输入的vue组件
2019/05/12 Javascript
基于JavaScript伪随机正态分布代码实例
2019/11/07 Javascript
vue 在methods中调用mounted的实现操作
2020/08/07 Javascript
jQuery实现简单评论区功能
2020/10/26 jQuery
[02:50]【扭转乾坤,只此一招】DOTA2全新版本永雾林渊开启新篇章
2020/12/24 DOTA
python设置检查点简单实现代码
2014/07/01 Python
实例探究Python以并发方式编写高性能端口扫描器的方法
2016/06/14 Python
python安装Scrapy图文教程
2017/08/14 Python
python给指定csv表格中的联系人群发邮件(带附件的邮件)
2019/12/31 Python
Python 实现自动完成A4标签排版打印功能
2020/04/09 Python
Python爬虫入门教程01之爬取豆瓣Top电影
2021/01/24 Python
联谊活动策划书
2014/01/26 职场文书
民事赔偿协议书
2014/11/02 职场文书
学校通报表扬范文
2015/05/04 职场文书
大学推普周活动总结
2015/05/07 职场文书
MySQL对数据表已有表进行分区表的实现
2021/11/01 MySQL