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开发windows GUI程序入门实例
Oct 23 Python
用Python实现服务器中只重载被修改的进程的方法
Apr 30 Python
Python编程之event对象的用法实例分析
Mar 23 Python
python jieba分词并统计词频后输出结果到Excel和txt文档方法
Feb 11 Python
Python通过调用有道翻译api实现翻译功能示例
Jul 19 Python
PHP统计代码行数的小代码
Sep 19 Python
详解用Python进行时间序列预测的7种方法
Mar 13 Python
python requests.get带header
May 05 Python
浅析Python 条件控制语句
Jul 15 Python
python Matplotlib数据可视化(1):简单入门
Sep 30 Python
TensorFlow的环境配置与安装方法
Feb 20 Python
python编程学习使用管道Pipe编写优化代码
Nov 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 更新数据库中断的解决方法
2009/06/05 PHP
PHP中遍历stdclass object的实现代码
2011/06/09 PHP
WordPress中获取指定分类及其子分类下的文章数目
2015/12/31 PHP
PHP实现的注册,登录及查询用户资料功能API接口示例
2017/06/06 PHP
PHP实现的数组和XML文件相互转换功能示例
2018/03/15 PHP
php下的原生ajax请求用法实例分析
2020/02/28 PHP
JS 学习笔记 防止发生命名冲突
2009/07/30 Javascript
JQuery 表单中textarea字数限制实现代码
2009/12/07 Javascript
jquery checkbox,radio是否选中的判断代码
2010/03/20 Javascript
SeaJS入门教程系列之使用SeaJS(二)
2014/03/03 Javascript
jQuery中removeData()方法用法实例
2014/12/27 Javascript
javascript简单实现等比例缩小图片的方法
2016/07/27 Javascript
JS实现的幻灯片切换显示效果
2016/09/07 Javascript
微信小程序 input输入及动态设置按钮的实现
2017/10/27 Javascript
Vue 全家桶实现移动端酷狗音乐功能
2018/11/16 Javascript
单线程JavaScript实现异步过程详解
2020/05/19 Javascript
[08:17]Ti9 现场cosplay
2019/09/10 DOTA
用Python制作在地图上模拟瘟疫扩散的Gif图
2015/03/31 Python
Python字符串逐字符或逐词反转方法
2015/05/21 Python
python 自动化将markdown文件转成html文件的方法
2016/09/23 Python
python 线程的暂停, 恢复, 退出详解及实例
2016/12/06 Python
python3实现windows下同名进程监控
2018/06/21 Python
从请求到响应过程中django都做了哪些处理
2018/08/01 Python
Python3实现mysql连接和数据框的形成(实例代码)
2020/01/17 Python
利用Tensorboard绘制网络识别准确率和loss曲线实例
2020/02/15 Python
python中使用you-get库批量在线下载bilibili视频的教程
2020/03/10 Python
Python ATM功能实现代码实例
2020/03/19 Python
Python flask路由间传递变量实例详解
2020/06/03 Python
pycharm激活方法到2099年(激活流程)
2020/09/22 Python
美国汽配连锁巨头Pep Boys官网:轮胎更换、汽车维修服务和汽车零部件
2017/01/14 全球购物
Smallable意大利家庭概念店:设计师童装及家居装饰
2018/01/08 全球购物
英国知名化妆品网站:Revolution Beauty(原TAM Beauty)
2018/02/28 全球购物
Myprotein俄罗斯官网:欧洲第一运动营养品牌
2019/05/05 全球购物
2016中考冲刺决心书
2015/09/22 职场文书
医院岗前培训心得体会
2016/01/08 职场文书
postgreSQL数据库基础知识介绍
2022/04/12 PostgreSQL