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使用asyncio包处理并发详解
Sep 09 Python
Tensorflow 自带可视化Tensorboard使用方法(附项目代码)
Feb 10 Python
浅谈pandas中shift和diff函数关系
Apr 08 Python
Flask框架WTForm表单用法示例
Jul 20 Python
python自带tkinter库实现棋盘覆盖图形界面
Jul 17 Python
Flask框架钩子函数功能与用法分析
Aug 02 Python
pygame实现烟雨蒙蒙下彩虹雨
Nov 11 Python
Python3 集合set入门基础
Feb 10 Python
python3实现raspberry pi(树莓派)4驱小车控制程序
Feb 12 Python
Python函数必须先定义,后调用说明(函数调用函数例外)
Jun 02 Python
使用Keras画神经网络准确性图教程
Jun 15 Python
用python修改excel表某一列内容的操作方法
Jun 11 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
迅雷下载《中学科技》怀旧期刊下载
2021/02/27 无线电
PHP 变量的定义方法
2010/01/26 PHP
php下将图片以二进制存入mysql数据库中并显示的实现代码
2010/05/27 PHP
php HtmlReplace输入过滤安全函数
2010/07/03 PHP
下拉列表选择项的选中在不同浏览器中的兼容性问题探讨
2013/09/18 Javascript
jquery next nextAll nextUntil siblings的区别介绍
2013/10/05 Javascript
JQuery教学之性能优化
2014/05/14 Javascript
JQuery给元素绑定click事件多次执行的解决方法
2014/05/29 Javascript
jQuery性能优化技巧分析
2015/02/20 Javascript
15个常用的jquery代码片段
2015/12/19 Javascript
使用JavaScript判断手机浏览器是横屏还是竖屏问题
2016/08/02 Javascript
JavaScript、C# URL编码、解码总结
2017/01/21 Javascript
JavaScript设计模式之代理模式详解
2017/06/09 Javascript
jQuery修改DOM结构_动力节点Java学院整理
2017/07/05 jQuery
vue小图标favicon不显示的解决方案
2017/09/19 Javascript
利用javascript如何随机生成一定位数的密码
2017/09/22 Javascript
Angular2.0实现modal对话框的方法示例
2018/02/18 Javascript
JavaScript中的E-mail 地址格式验证
2018/03/28 Javascript
inquirer.js一个用户与命令行交互的工具详解
2019/05/18 Javascript
python解析xml文件实例分享
2013/12/04 Python
PyQt5实现类似别踩白块游戏
2019/01/24 Python
Python3.8中使用f-strings调试
2019/05/22 Python
Windows下python3安装tkinter的问题及解决方法
2020/01/06 Python
如何使用html5与css3完成google涂鸦动画
2012/12/16 HTML / CSS
StubHub智利:购买和出售您的门票
2016/11/23 全球购物
Conforama瑞士:家具、厨房、电器、装饰
2020/09/06 全球购物
璀璨的珍珠、密钉和个性化珠宝:Lily & Roo
2021/01/21 全球购物
致接力运动员广播稿
2014/02/17 职场文书
兽医医药专业求职信
2014/07/27 职场文书
关于清明节的演讲稿2015
2015/03/18 职场文书
财务经理岗位职责范本
2015/04/08 职场文书
为什么阅读对所有年龄段的孩子都很重要?
2019/07/08 职场文书
mysql字符串截取函数小结
2021/04/05 MySQL
AJAX实现指定部分页面刷新效果
2021/10/16 Javascript
Sql Server 行数据的某列值想作为字段列显示的方法
2022/04/20 SQL Server
JS前端可扩展的低代码UI框架Sunmao使用详解
2022/07/23 Javascript