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读写Redis数据库操作示例
Mar 18 Python
用Python中的__slots__缓存资源以节省内存开销的方法
Apr 02 Python
Python打印斐波拉契数列实例
Jul 07 Python
Python简单定义与使用字典dict的方法示例
Jul 25 Python
Python连接phoenix的方法示例
Sep 29 Python
Python 错误和异常代码详解
Jan 29 Python
python 显示数组全部元素的方法
Apr 19 Python
python爬虫之线程池和进程池功能与用法详解
Aug 02 Python
Python日期时间模块datetime详解与Python 日期时间的比较,计算实例代码
Sep 14 Python
Python3 jupyter notebook 服务器搭建过程
Nov 30 Python
python3 打印输出字典中特定的某个key的方法示例
Jul 06 Python
用Python爬取英雄联盟的皮肤详细示例
Dec 06 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
php简单对象与数组的转换函数代码(php多层数组和对象的转换)
2011/05/18 PHP
PHP中return 和 exit 、break和contiue 区别与用法
2012/04/09 PHP
基于ubuntu下nginx+php+mysql安装配置的具体操作步骤
2013/04/28 PHP
php数组合并的二种方法
2014/03/21 PHP
php对称加密算法示例
2014/05/07 PHP
基于PHPexecl类生成复杂的报表表头示例
2016/10/14 PHP
PHP实现字符串的全排列详解
2019/04/24 PHP
javascript引用对象的方法代码
2007/08/13 Javascript
javaScript 关闭浏览器 (不弹出提示框)
2010/01/31 Javascript
Javascript 获取链接(url)参数的方法[正则与截取字符串]
2010/02/09 Javascript
jQuery 下拉列表 二级联动插件分享
2012/03/29 Javascript
jquery 新建的元素事件绑定问题解决方案
2014/06/12 Javascript
Javascript调用函数方法的几种方式介绍
2015/03/20 Javascript
JS实现兼容火狐及IE iframe onload属性的遮罩层隐藏及显示效果
2016/08/23 Javascript
jquery实现转盘抽奖功能
2017/01/06 Javascript
解决Vue2.x父组件与子组件之间的双向绑定问题
2018/03/06 Javascript
对vue里函数的调用顺序介绍
2018/03/17 Javascript
JavaScript创建防篡改对象的方法分析
2018/12/30 Javascript
Layui给switch添加响应事件的例子
2019/09/03 Javascript
vue实现简单的登录弹出框
2020/10/26 Javascript
python通过定义一个类实例作为ftp回调方法
2015/05/04 Python
Python处理XML格式数据的方法详解
2017/03/21 Python
Python读写zip压缩文件的方法
2018/08/29 Python
深入浅析Python 中 is 语法带来的误解
2019/05/07 Python
django框架基于模板 生成 excel(xls) 文件操作示例
2019/06/19 Python
Python单元测试与测试用例简析
2019/11/09 Python
python实现异常信息堆栈输出到日志文件
2019/12/26 Python
Python导入模块包原理及相关注意事项
2020/03/25 Python
10个python爬虫入门实例(小结)
2020/11/01 Python
CSS3中的@keyframes关键帧动画的选择器绑定
2016/06/13 HTML / CSS
二年级学生评语大全
2014/04/23 职场文书
大专生自荐书范文
2014/06/22 职场文书
外贸会计专业自荐信
2014/06/22 职场文书
批评与自我批评发言稿
2014/10/15 职场文书
基层党员群众路线整改措施及努力方向
2014/10/28 职场文书
2015年学校党支部工作总结
2015/04/01 职场文书