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多线程编程中的join函数使用心得
Sep 02 Python
Python实现扣除个人税后的工资计算器示例
Mar 26 Python
Python中最大递归深度值的探讨
Mar 05 Python
Python redis操作实例分析【连接、管道、发布和订阅等】
May 16 Python
Python何时应该使用Lambda函数
Jul 02 Python
利用python实现汉字转拼音的2种方法
Aug 12 Python
Python MongoDB 插入数据时已存在则不执行,不存在则插入的解决方法
Sep 24 Python
python ftplib模块使用代码实例
Dec 31 Python
Django获取model中的字段名和字段的verbose_name方式
May 19 Python
python破解同事的压缩包密码
Oct 14 Python
Python爬虫自动化获取华图和粉笔网站的错题(推荐)
Jan 08 Python
python3中celery异步框架简单使用+守护进程方式启动
Jan 20 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 随机数的产生、页面跳转、件读写、文件重命名、switch语句
2009/08/07 PHP
php 随机记录mysql rand()造成CPU 100%的解决办法
2010/05/18 PHP
PHP中使用foreach()遍历二维数组的简单实例
2016/06/13 PHP
用PHP去掉文件头的Unicode签名(BOM)方法
2017/06/22 PHP
PHP实现统计所有字符在字符串中出现次数的方法
2017/10/17 PHP
PHP使用Session实现上传进度功能详解
2019/08/06 PHP
小议Function.apply() 之一------(函数的劫持与对象的复制)
2006/11/30 Javascript
JavaScript小技巧 2.5 则
2010/09/12 Javascript
一个页面元素appendchild追加到另一个页面元素的问题
2013/01/27 Javascript
js弹出层(jQuery插件形式附带reLoad功能)
2013/04/12 Javascript
JavaScript自学笔记(必看篇)
2016/06/23 Javascript
Bootstrap学习笔记之环境配置(1)
2016/12/07 Javascript
jQuery 实现批量提交表格多行数据的方法
2018/08/09 jQuery
[28:05]完美世界DOTA2联赛循环赛Inki vs DeMonsTer 第一场 10月30日
2020/10/31 DOTA
Windows 7下Python Web环境搭建图文教程
2018/03/20 Python
pandas 两列时间相减换算为秒的方法
2018/04/20 Python
python中类的输出或类的实例输出为这种形式的原因
2019/08/12 Python
Django实现文件上传下载
2019/10/06 Python
Python实现数值积分方式
2019/11/20 Python
解决Python安装cryptography报错问题
2020/09/03 Python
python实现猜拳游戏项目
2020/11/30 Python
在PyCharm中安装PaddlePaddle的方法
2021/02/05 Python
浅析两列自适应布局的3种思路
2016/05/03 HTML / CSS
深入探究HTML5的History API
2015/07/09 HTML / CSS
TobyDeals美国:在电子产品上获得最好的优惠和折扣
2019/08/11 全球购物
阿联酋彩妆品牌:OUD MILANO
2019/10/06 全球购物
SQL中where和having的区别
2012/06/17 面试题
党课知识竞赛主持词
2014/04/01 职场文书
房地产推广策划方案
2014/05/19 职场文书
我的中国梦口号
2014/06/16 职场文书
纪念一二九运动演讲稿
2014/09/16 职场文书
结婚保证书(三从四德)
2015/02/26 职场文书
新生开学寄语大全
2015/05/28 职场文书
2016大学优秀学生干部事迹材料
2016/03/01 职场文书
商业计划书之服装
2019/09/09 职场文书
javascript Number 与 Math对象的介绍
2021/11/17 Javascript