Python标准库itertools的使用方法


Posted in Python onJanuary 17, 2020

Python标准库itertools模块介绍

itertools是python内置的模块,使用简单且功能强大,这里尝试汇总整理下,并提供简单应用示例;如果还不能满足你的要求,欢迎加入补充。

使用Python标准库itertools只需简单一句导入:import itertools

chain()

与其名称意义一样,给它一个列表如 lists/tuples/iterables,链接在一起;返回iterables对象。

letters = ['a', 'b', 'c', 'd', 'e', 'f']
booleans = [1, 0, 1, 0, 0, 1]
print(list(itertools.chain(letters,booleans)))
#输出:['a', 'b', 'c', 'd', 'e', 'f', 1, 0, 1, 0, 0, 1]
print(tuple(itertools.chain(letters,letters[3:])))
#输出('a', 'b', 'c', 'd', 'e', 'f', 'd', 'e', 'f')
print(set(itertools.chain(letters,letters[3:])))
#输出:{'a', 'd', 'b', 'e', 'c', 'f'}
print(list(itertools.chain(letters,letters[3:])))
#输出:['a', 'b', 'c', 'd', 'e', 'f', 'd', 'e', 'f']
for item in list(itertools.chain(letters,booleans)):
print(item)

count()

生成无界限序列,count(start=0, step=1) ,示例从100开始,步长为2,循环10,打印对应值;必须手动break,count()会一直循环。

i = 0
  for item in itertools.count(100,2):
    i += 1
    if i > 10 : break
    
    print(item)

filterfalse()

 Python filterfalse(contintion,data) 迭代过滤条件为false的数据。如果条件为空,返回data中为false的项;

booleans = [1, 0, 1, 0, 0, 1]
numbers = [23, 20, 44, 32, 7, 12]
print(list(itertools.filterfalse(None,booleans)))
#输出:[0, 0, 0]
print(list(itertools.filterfalse(lambda x : x < 20,numbers)))
#输出:[23, 20, 44, 32]

compress()

返回我们需要使用的元素,根据b集合中元素真值,返回a集中对应的元素。

print(list(itertools.compress(letters,booleans)))
# ['a', 'c', 'f']

starmap()

针对list中的每一项,调用函数功能。starmap(func,list[]) ;

starmap(pow, [(2,5), (3,2), (10,3)]) --> 32 9 1000
>>> from itertools import *
>>> x = starmap(max,[[5,14,5],[2,34,6],[3,5,2]])
>>> for i in x:
>>> print (i)
14
34
5

repeat()

repeat(object[, times]) 重复times次;

repeat(10, 3) --> 10 10 10

dropwhile()

dropwhile(func, seq );当函数f执行返回假时, 开始迭代序列

dropwhile(lambda x: x<5, [1,4,6,4,1]) --> 6 4 1

takewhile()

takewhile(predicate, iterable);返回序列,当predicate为true是截止。

takewhile(lambda x: x<5, [1,4,6,4,1]) --> 1 4

islice()

islice(seq[, start], stop[, step]);返回序列seq的从start开始到stop结束的步长为step的元素的迭代器

for i in islice("abcdef", 0, 4, 2):#a, c
  print i

product()

product(iter1,iter2, ... iterN, [repeat=1]);创建一个迭代器,生成表示item1,item2等中的项目的笛卡尔积的元组,repeat是一个关键字参数,指定重复生成序列的次数

# product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy
  # product(range(2), repeat=3) --> 000 001 010 011 100 101 110 111
for i in product([1, 2, 3], [4, 5], [6, 7]):
  print i
(1, 4, 6)
(1, 4, 7)
(1, 5, 6)
(1, 5, 7)
(2, 4, 6)
(2, 4, 7)
(2, 5, 6)
(2, 5, 7)
(3, 4, 6)
(3, 4, 7)
(3, 5, 6)
(3, 5, 7)

permutations()

permutations(p[,r]);返回p中任意取r个元素做排列的元组的迭代器

for i in permutations([1, 2, 3], 3):
  print i
(1, 2, 3)
(1, 3, 2)
(2, 1, 3)
(2, 3, 1)
(3, 1, 2)
(3, 2, 1)

combinations()

combinations(iterable,r);创建一个迭代器,返回iterable中所有长度为r的子序列,返回的子序列中的项按输入iterable中的顺序排序

note:不带重复

for i in combinations([1, 2, 3], 2):
  print i
(1, 2)
(1, 3)
(2, 3)

combinations_with_replacement()

同上, 带重复 例子:

for i in combinations_with_replacement([1, 2, 3], 2):
  print i
(1, 1)
(1, 2)
(1, 3)
(2, 2)
(2, 3)
(3, 3)

应用示例

求质数序列中1,3,5,7,9,11,13,15三个数之和为35的三个数;

def get_three_data(data_list,amount):
  for data in list(itertools.combinations(data_list, 3)):
    if sum(data) == amount:
      print(data)
#(7, 13, 15)

更多python标准库使用方法请点击下面的相关文章

Python 相关文章推荐
对于Python中线程问题的简单讲解
Apr 03 Python
Python操作RabbitMQ服务器实现消息队列的路由功能
Jun 29 Python
Python3安装Pymongo详细步骤
May 26 Python
cmd运行python文件时对结果进行保存的方法
May 16 Python
Python3中lambda表达式与函数式编程讲解
Jan 14 Python
Python 中PyQt5 点击主窗口弹出另一个窗口的实现方法
Jul 04 Python
Python 通过微信控制实现app定位发送到个人服务器再转发微信服务器接收位置信息
Aug 05 Python
详解python 破解网站反爬虫的两种简单方法
Feb 09 Python
Python能做什么
Jun 02 Python
Python测试框架:pytest学习笔记
Oct 20 Python
python 实时调取摄像头的示例代码
Nov 25 Python
Python集合set()使用的方法详解
Mar 18 Python
Python实现投影法分割图像示例(二)
Jan 17 #Python
Python常用库大全及简要说明
Jan 17 #Python
Python Sphinx使用实例及问题解决
Jan 17 #Python
通过实例了解Python str()和repr()的区别
Jan 17 #Python
python无序链表删除重复项的方法
Jan 17 #Python
Python实现投影法分割图像示例(一)
Jan 17 #Python
np.dot()函数的用法详解
Jan 17 #Python
You might like
php 静态变量与自定义常量的使用方法
2010/01/26 PHP
在PHP中PDO解决中文乱码问题的一些补充
2010/09/06 PHP
如何利用php array_multisort函数 对数据库结果进行复杂排序
2013/06/08 PHP
php5.5中类级别的常量使用介绍
2013/10/02 PHP
基于linnux+phantomjs实现生成图片格式的网页快照
2015/04/15 PHP
php编程中echo用逗号和用点号连接的区别
2016/03/26 PHP
PHP unlink与rmdir删除目录及目录下所有文件实例代码
2018/02/07 PHP
Maps Javascript
2007/01/22 Javascript
用javascript自动显示最后更新时间
2007/03/15 Javascript
JavaScript中textRange对象使用方法小结
2015/03/24 Javascript
JavaScript获取一个范围内日期的方法
2015/04/24 Javascript
多个js毫秒倒计时同时进行效果
2016/01/05 Javascript
AngularGauge 属性解析详解
2016/09/06 Javascript
浅谈AngularJs指令之scope属性详解
2016/10/24 Javascript
手机端转换rem适应
2017/04/01 Javascript
vue watch自动检测数据变化实时渲染的方法
2018/01/16 Javascript
详解Nodejs mongoose
2018/06/10 NodeJs
javascript中call()、apply()的区别
2019/03/21 Javascript
使用layer.msg 时间设置不起作用的解决方法
2019/09/12 Javascript
JS实现吸顶特效
2020/01/08 Javascript
解决ant Design中this.props.form.validateFields未执行的问题
2020/10/27 Javascript
跟老齐学Python之用Python计算
2014/09/12 Python
解析Python中的二进制位运算符
2015/05/13 Python
举例讲解Linux系统下Python调用系统Shell的方法
2015/11/07 Python
Python Scapy随心所欲研究TCP协议栈
2018/11/20 Python
Python SQLAlchemy入门教程(基本用法)
2019/11/11 Python
Python tkinter常用操作代码实例
2020/01/03 Python
浅谈Pycharm最有必要改的几个默认设置项
2020/02/14 Python
PyInstaller将Python文件打包为exe后如何反编译(破解源码)以及防止反编译
2020/04/15 Python
如何在python中判断变量的类型
2020/07/29 Python
服装创业计划书范文
2014/02/05 职场文书
舞蹈兴趣小组活动总结
2014/07/07 职场文书
市场策划求职信
2014/08/07 职场文书
乱丢垃圾袋检讨书
2014/10/08 职场文书
旅游项目合作意向书
2015/05/08 职场文书
分析ZooKeeper分布式锁的实现
2021/06/30 Java/Android