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进行数据科学工作的简单入门教程
Apr 01 Python
Python获取文件所在目录和文件名的方法
Jan 12 Python
Python如何通过subprocess调用adb命令详解
Aug 27 Python
Python实现带参数与不带参数的多重继承示例
Jan 30 Python
Python在groupby分组后提取指定位置记录方法
Apr 20 Python
Python统计python文件中代码,注释及空白对应的行数示例【测试可用】
Jul 25 Python
如何使用pyinstaller打包32位的exe程序
May 26 Python
Python安装tar.gz格式文件方法详解
Jan 19 Python
使用keras实现BiLSTM+CNN+CRF文字标记NER
Jun 29 Python
Python 数据的累加与统计的示例代码
Aug 03 Python
Python抖音快手代码舞(字符舞)的实现方法
Feb 07 Python
python 如何用urllib与服务端交互(发送和接收数据)
Mar 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
在php中使用sockets:从新闻组中获取文章
2006/10/09 PHP
php中替换字符串中的空格为逗号','的方法
2014/06/09 PHP
利用javascript中的call实现继承
2007/01/22 Javascript
js程序中美元符号$是什么
2008/06/05 Javascript
基于SVG的web页面图形绘制API介绍及编程演示
2013/06/28 Javascript
解析js原生方法创建表格效率测试
2013/07/08 Javascript
多个datatable共存造成多个表格的checkbox都被选中
2013/07/11 Javascript
JQuery调用WebServices的方法和4个实例
2014/05/06 Javascript
javascript限制用户只能输汉字中文的方法
2014/11/20 Javascript
js在指定位置增加节点函数insertBefore()用法实例
2015/01/12 Javascript
AngularJS基础 ng-href 指令用法
2016/08/01 Javascript
利用原生JS自动生成文章标题树的实例
2016/08/22 Javascript
手动初始化Angular的模块与控制器
2016/12/26 Javascript
javaScript+turn.js实现图书翻页效果实例代码
2017/02/16 Javascript
Javascript实现一个简单的输入关键字添加标签效果实例
2017/06/01 Javascript
使用npm安装最新版本nodejs
2018/01/18 NodeJs
jQuery实现输入框的放大和缩小功能示例
2018/07/21 jQuery
element-ui的回调函数Events的用法详解
2018/10/16 Javascript
《javascript设计模式》学习笔记七:Javascript面向对象程序设计组合模式详解
2020/04/08 Javascript
python查找指定具有相同内容文件的方法
2015/06/28 Python
Python的string模块中的Template类字符串模板用法
2016/06/27 Python
pandas中的DataFrame按指定顺序输出所有列的方法
2018/04/10 Python
python 常用的基础函数
2018/07/10 Python
tensorflow 中对数组元素的操作方法
2018/07/27 Python
pymysql之cur.fetchall() 和cur.fetchone()用法详解
2020/05/15 Python
Python selenium环境搭建实现过程解析
2020/09/08 Python
python3.9实现pyinstaller打包python文件成exe
2020/12/13 Python
美国定制钻石订婚戒指:Ritani
2017/12/08 全球购物
ParcelABC西班牙:包裹运送和快递服务
2019/12/24 全球购物
LINUX下线程,GDI类的解释
2016/12/14 面试题
住宿生擅自离校检讨书
2014/09/22 职场文书
对外汉语专业大学生职业生涯规划书
2014/10/11 职场文书
幼儿园迎新生欢迎词
2015/09/30 职场文书
保安辞职申请书应该怎么写?
2019/07/15 职场文书
基于Redis实现分布式锁的方法(lua脚本版)
2021/05/12 Redis
十大冰系宝可梦排名,颜值最高的阿罗拉九尾,第三使用率第一
2022/03/18 日漫