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中使用urllib2防止302跳转的代码例子
Jul 07 Python
Android模拟器无法启动,报错:Cannot set up guest memory ‘android_arm’ Invalid argument的解决方法
Jul 01 Python
在win和Linux系统中python命令行运行的不同
Jul 03 Python
python实现ID3决策树算法
Dec 20 Python
浅谈Django学习migrate和makemigrations的差别
Jan 18 Python
Python从零开始创建区块链
Mar 06 Python
Python numpy 点数组去重的实例
Apr 18 Python
通过实例简单了解Python中yield的作用
Dec 11 Python
python3+opencv生成不规则黑白mask实例
Feb 19 Python
Python设计密码强度校验程序
Jul 30 Python
python通用数据库操作工具 pydbclib的使用简介
Dec 21 Python
Matplotlib绘制混淆矩阵的实现
May 27 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
一个ftp类(ini.php)
2006/10/09 PHP
php记录日志的实现代码
2011/08/08 PHP
php流量统计功能的实现代码
2012/09/29 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十五)
2014/06/30 PHP
php字符串替换函数substr_replace()用法实例
2015/03/17 PHP
php 人员权限管理(RBAC)实例(推荐)
2017/05/24 PHP
php中目录操作opendir()、readdir()及scandir()用法示例
2019/06/08 PHP
实例:用 JavaScript 来操作字符串(一些字符串函数)
2007/02/15 Javascript
JavaScript设置FieldSet展开与收缩
2009/05/15 Javascript
JavaScript 对Cookie 操作的封装小结
2009/12/31 Javascript
自制基于jQuery的智能提示插件一枚
2011/02/18 Javascript
理清apply(),call()的区别和关系
2011/08/14 Javascript
Javascript Objects详解
2014/09/04 Javascript
AngularJS学习笔记之TodoMVC的分析
2015/02/22 Javascript
JS创建对象的写法示例
2016/11/04 Javascript
jQuery利用sort对DOM元素进行排序操作
2016/11/07 Javascript
详解vue过滤器在v2.0版本用法
2017/06/01 Javascript
vue.js中实现登录控制的方法示例
2018/04/23 Javascript
JS绘图Flot如何实现可选显示曲线图功能
2020/10/16 Javascript
微信小程序弹窗禁止页面滚动的实现代码
2020/12/30 Javascript
[01:20]辉夜杯背景故事宣传片《辉夜传说》
2015/12/25 DOTA
从零学python系列之新版本导入httplib模块报ImportError解决方案
2014/05/23 Python
Python测试人员需要掌握的知识
2018/02/08 Python
python中退出多层循环的方法
2018/11/27 Python
python解压TAR文件至指定文件夹的实例
2019/06/10 Python
Python 可视化神器Plotly详解
2020/12/26 Python
HTML5打开本地app应用的方法
2016/03/31 HTML / CSS
main 主函数执行完毕后,是否可能会再执行一段代码,给出说明
2012/12/05 面试题
幼教个人求职信范文
2013/12/02 职场文书
图书室管理制度
2014/01/19 职场文书
制作部班长职位说明书
2014/02/26 职场文书
《花木兰》教学反思
2014/04/09 职场文书
简历中自我评价范文
2015/03/11 职场文书
消防宣传标语大全
2015/08/03 职场文书
2016年暑期教师培训心得体会
2016/01/09 职场文书
使用python+pygame开发消消乐游戏附完整源码
2021/06/10 Python