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以并发方式编写高性能端口扫描器的方法
Jun 14 Python
K-近邻算法的python实现代码分享
Dec 09 Python
Python生成器generator用法示例
Aug 10 Python
解决Python下json.loads()中文字符出错的问题
Dec 19 Python
python如何实现视频转代码视频
Jun 17 Python
Python OpenCV中的resize()函数的使用
Jun 20 Python
pandas DataFrame的修改方法(值、列、索引)
Aug 02 Python
Python爬虫运用正则表达式的方法和优缺点
Aug 25 Python
Python hashlib模块加密过程解析
Nov 05 Python
Python爬取微信小程序通用方法代码实例详解
Sep 29 Python
Python 数据可视化神器Pyecharts绘制图像练习
Feb 28 Python
python实现简单的三子棋游戏
Apr 28 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
回首过去10年中最搞笑的10部动漫,哪一部让你节操尽碎?
2020/03/03 日漫
PHP配置心得包含MYSQL5乱码解决
2006/11/20 PHP
利用phpExcel实现Excel数据的导入导出(全步骤详细解析)
2013/11/26 PHP
PHP实现操作redis的封装类完整实例
2015/11/14 PHP
php通过PHPExcel导入Excel表格到MySQL数据库的简单实例
2016/10/29 PHP
PHP/HTML混写的四种方式总结
2017/02/27 PHP
php封装json通信接口详解及实例
2017/03/07 PHP
对YUI扩展的Gird组件 Part-2
2007/03/10 Javascript
JS 中document.URL 和 windows.location.href 的区别
2009/11/11 Javascript
jQuery对象与DOM对象之间的转换方法
2010/04/15 Javascript
表格单元格交错着色实现思路及代码
2013/04/01 Javascript
js展开闭合效果演示代码
2013/07/24 Javascript
禁用页面部分JavaScript方法的具体实现
2013/07/31 Javascript
js控制再次点击按钮之间的间隔时间可防止重复提交
2014/08/01 Javascript
js实现文本框中输入文字页面中div层同步获取文本框内容的方法
2015/03/03 Javascript
利用JQuery写一个简单的异步分页插件
2016/03/07 Javascript
Webpack打包字体font-awesome的方法示例
2018/04/26 Javascript
NodeJS搭建HTTP服务器的实现步骤
2018/10/12 NodeJs
JS实现商品橱窗特效
2020/01/09 Javascript
vue 防止页面加载时看到花括号的解决操作
2020/11/09 Javascript
Python cookbook(数据结构与算法)实现对不原生支持比较操作的对象排序算法示例
2018/03/15 Python
利用Python如何实现数据驱动的接口自动化测试
2018/05/11 Python
linux下python使用sendmail发送邮件
2018/05/22 Python
Python/Django后端使用PIL Image生成头像缩略图
2019/04/30 Python
python经典趣味24点游戏程序设计
2019/07/26 Python
详解用Pytest+Allure生成漂亮的HTML图形化测试报告
2020/03/31 Python
html5中localStorage本地存储的简单使用
2017/06/16 HTML / CSS
HTML5 Canvas的常用线条属性值总结
2016/03/17 HTML / CSS
伊莱克斯(Electrolux)俄罗斯网上商店:瑞典家用电器品牌
2021/01/23 全球购物
心理学专业毕业生推荐信范文
2013/11/21 职场文书
简历的自荐信
2013/12/19 职场文书
二年级评语大全
2014/04/23 职场文书
学习实践科学发展观心得体会
2014/09/10 职场文书
辞职信的写法
2015/02/27 职场文书
如何使用Maxwell实时同步mysql数据
2021/04/08 MySQL
vue如何在data中引入图片的正确路径
2022/06/05 Vue.js