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 ORM框架SQLAlchemy学习笔记之安装和简单查询实例
Jun 10 Python
Python实现的使用telnet登陆聊天室实例
Jun 17 Python
Python网站验证码识别
Jan 25 Python
python实现俄罗斯方块游戏
Mar 25 Python
启动Atom并运行python文件的步骤
Nov 09 Python
Flask核心机制之上下文源码剖析
Dec 25 Python
python使用selenium登录QQ邮箱(附带滑动解锁)
Jan 23 Python
Django+Xadmin构建项目的方法步骤
Mar 06 Python
一步步教你用python的scrapy编写一个爬虫
Apr 17 Python
python自动化UI工具发送QQ消息的实例
Aug 27 Python
python开发前景如何
Jun 11 Python
python飞机大战游戏实例讲解
Dec 04 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
ie focus bug 解决方法
2009/09/03 Javascript
跨域传值即主页面与iframe之间互相传值
2013/12/09 Javascript
jQuery对下拉框,单选框,多选框的操作
2014/02/21 Javascript
jquery获取当前日期的方法
2015/01/14 Javascript
Jquery插件easyUi实现表单验证示例
2015/12/15 Javascript
JS onkeypress兼容性写法详解
2016/04/27 Javascript
深入分析javascript中的错误处理机制
2016/07/17 Javascript
浅谈jquery的html方法里包含特殊字符的处理
2016/11/30 Javascript
javascript history对象详解
2017/02/09 Javascript
让div运动起来 js实现缓动效果
2017/07/06 Javascript
js数字滑动时钟的简单实现(示例讲解)
2017/08/14 Javascript
解决JQuery全选/反选第二次失效的问题
2017/10/11 jQuery
利用jQuery+localStorage实现一个简易的计时器示例代码
2017/12/25 jQuery
对vue.js中this.$emit的深入理解
2018/02/23 Javascript
vue的传参方式汇总和router使用技巧
2018/05/22 Javascript
详解javascript appendChild()的完整功能
2018/08/18 Javascript
Vue 处理表单input单行文本框的实例代码
2019/05/09 Javascript
vue中的计算属性和侦听属性
2020/11/06 Javascript
创建与框架无关的JavaScript插件
2020/12/01 Javascript
Vue在H5 项目中使用融云进行实时个人单聊通讯
2020/12/14 Vue.js
[50:50]完美世界DOTA2联赛PWL S3 INK ICE vs DLG 第一场 12.20
2020/12/23 DOTA
Python学习小技巧之列表项的推导式与过滤操作
2017/05/20 Python
numpy.transpose对三维数组的转置方法
2018/04/17 Python
python对验证码降噪的实现示例代码
2019/11/12 Python
PyCharm2020最新激活码+激活码补丁(亲测最新版PyCharm2020.2激活成功)
2020/11/25 Python
Python+kivy BoxLayout布局示例代码详解
2020/12/28 Python
使用python对excel表格处理的一些小功能
2021/01/25 Python
CSS3弹性布局内容对齐(justify-content)属性使用详解
2017/07/31 HTML / CSS
前后端结合实现amazeUI分页效果
2020/08/21 HTML / CSS
大学毕业感言100字
2014/02/03 职场文书
《黄山奇石》教学反思
2014/04/19 职场文书
考试作弊检讨书范文
2015/01/27 职场文书
公司保洁员岗位职责
2015/02/13 职场文书
2016年优秀团员事迹材料
2016/02/25 职场文书
Nginx反向代理及负载均衡如何实现(基于linux)
2021/03/31 Servers
Python中异常处理用法
2021/11/27 Python