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列表list数组array用法实例解析
Oct 28 Python
Python如何实现守护进程的方法示例
Feb 08 Python
python中安装Scrapy模块依赖包汇总
Jul 02 Python
pandas获取groupby分组里最大值所在的行方法
Apr 20 Python
Python高级用法总结
May 26 Python
python3利用Socket实现通信的方法示例
May 06 Python
Python实现的爬取百度贴吧图片功能完整示例
May 10 Python
对Python中一维向量和一维向量转置相乘的方法详解
Aug 26 Python
TensorFlow实现自定义Op方式
Feb 04 Python
使用TensorFlow搭建一个全连接神经网络教程
Feb 06 Python
python不相等的两个字符串的 if 条件判断为True详解
Mar 12 Python
Python如何使用bokeh包和geojson数据绘制地图
Mar 21 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 禁止页面缓存输出
2009/01/07 PHP
PHP实现多条件查询实例代码
2010/07/17 PHP
PHP中几个常用的魔术常量
2012/02/23 PHP
深入php-fpm的两种进程管理模式详解
2013/06/03 PHP
Laravel路由设定和子路由设定实例分析
2016/03/30 PHP
如何在PHP环境中使用ProtoBuf数据格式
2020/06/19 PHP
jquery获取ASP.NET服务器端控件dropdownlist和radiobuttonlist生成客户端HTML标签后的value和text值
2010/06/28 Javascript
基于jQuery试卷自动排版系统
2010/07/18 Javascript
Javascript排序算法之合并排序(归并排序)的2个例子
2014/04/04 Javascript
jQuery多级手风琴菜单实例讲解
2015/10/22 Javascript
BootStrap智能表单demo示例详解
2016/06/13 Javascript
JavaScript实现刷新不重记的倒计时
2016/08/10 Javascript
JavaScript中匿名函数的递归调用
2017/01/22 Javascript
Javascript中类式继承和原型式继承的实现方法和区别之处
2017/04/25 Javascript
vue表单绑定实现多选框和下拉列表的实例
2017/08/12 Javascript
详解关于react-redux中的connect用法介绍及原理解析
2017/09/11 Javascript
解决select2在bootstrap modal中不能正常使用的问题
2018/08/09 Javascript
js中火星坐标、百度坐标、WGS84坐标转换实现方法示例
2020/03/02 Javascript
使用python实现递归版汉诺塔示例(汉诺塔递归算法)
2014/04/08 Python
python调用新浪微博API项目实践
2014/07/28 Python
Python中处理字符串的相关的len()方法的使用简介
2015/05/19 Python
TensorFlow入门使用 tf.train.Saver()保存模型
2018/04/24 Python
Python使用scrapy爬取阳光热线问政平台过程解析
2019/08/14 Python
从训练好的tensorflow模型中打印训练变量实例
2020/01/20 Python
利用Python中的Xpath实现一个在线汇率转换器
2020/09/09 Python
如何基于Python爬虫爬取美团酒店信息
2020/11/03 Python
利用 CSS3 实现的无缝轮播功能代码
2017/09/25 HTML / CSS
应用电子技术专业个人求职信
2013/09/21 职场文书
大学生简历的个人自我评价
2013/12/04 职场文书
酒店出纳岗位职责
2013/12/29 职场文书
大学活动总结格式
2014/04/29 职场文书
国际语言毕业生求职信
2014/07/08 职场文书
白鹤梁导游词
2015/02/06 职场文书
十月围城观后感
2015/06/08 职场文书
关于空气污染危害的感想
2015/08/11 职场文书
新学期开学寄语2016
2015/12/04 职场文书