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循环监控远程端口的方法
Mar 14 Python
基python实现多线程网页爬虫
Sep 06 Python
举例讲解Python的lambda语句声明匿名函数的用法
Jul 01 Python
tensorflow 使用flags定义命令行参数的方法
Apr 23 Python
Python面向对象程序设计类变量与成员变量、类方法与成员方法用法分析
Apr 12 Python
python,Django实现的淘宝客登录功能示例
Jun 12 Python
使用Python做垃圾分类的原理及实例代码附源码
Jul 02 Python
Python求两点之间的直线距离(2种实现方法)
Jul 07 Python
tensorflow求导和梯度计算实例
Jan 23 Python
pandas读取csv文件提示不存在的解决方法及原因分析
Apr 21 Python
浅谈Python 函数式编程
Jun 20 Python
利用Python如何画一颗心、小人发射爱心
Feb 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 随机记录mysql rand()造成CPU 100%的解决办法
2010/05/18 PHP
php生成随机颜色的方法
2014/11/13 PHP
PHP转换文本框内容为HTML格式的方法
2016/07/20 PHP
Ajax实现对静态页面的文章访问统计功能示例
2016/10/10 PHP
PHP实现找出链表中环的入口节点
2018/01/16 PHP
实现复选框全选/全不选切换
2006/12/23 Javascript
JavaScript中“+=”的应用
2007/02/02 Javascript
再谈javascript 动态添加样式规则 W3C校检
2009/12/25 Javascript
探讨javascript是不是面向对象的语言
2013/11/21 Javascript
JS基于VML技术实现的五角星礼花效果代码
2015/10/26 Javascript
jQuery判断元素是否显示 是否隐藏的简单实现代码
2016/05/19 Javascript
js面向对象实现canvas制作彩虹球喷枪效果
2016/09/24 Javascript
MUI实现上拉加载和下拉刷新效果
2017/06/30 Javascript
以BootStrap Tab为例写一个前端组件
2017/07/25 Javascript
vue使用监听实现全选反选功能
2018/07/06 Javascript
IE9 elementUI文件上传的问题解决
2018/10/17 Javascript
javascript中一些奇葩的日期换算方法总结
2018/11/14 Javascript
vue实现数据控制视图的原理解析
2020/01/07 Javascript
全面了解python中的类,对象,方法,属性
2016/09/11 Python
Python列表list解析操作示例【整数操作、字符操作、矩阵操作】
2017/07/25 Python
Python之两种模式的生产者消费者模型详解
2018/10/26 Python
解决python xx.py文件点击完之后一闪而过的问题
2019/06/24 Python
python实现获取单向链表倒数第k个结点的值示例
2019/10/24 Python
使用pickle存储数据dump 和 load实例讲解
2019/12/30 Python
Python3的socket使用方法详解
2020/02/18 Python
Python如何用wx模块创建文本编辑器
2020/06/07 Python
jupyter notebook远程访问不了的问题解决方法
2021/01/11 Python
IE9对HTML5中部分属性不支持的原因分析
2014/10/15 HTML / CSS
H5 meta小结(前端必看篇)
2016/08/24 HTML / CSS
松下电器美国官方商店:Panasonic美国
2016/10/14 全球购物
Trench London官方网站:高级风衣和意大利皮夹克
2020/07/11 全球购物
关于感谢信的范文
2015/01/23 职场文书
悬空寺导游词
2015/02/05 职场文书
小学四年级作文之最感动的一件事
2019/11/01 职场文书
Django Paginator分页器的使用示例
2021/06/23 Python
详解OpenCV曝光融合
2022/04/29 Python