详解python itertools功能


Posted in Python onFebruary 07, 2020

介绍

      itertools是python内置的模块,使用简单且功能强大,这里尝试汇总整理下,并提供简单应用示例;如果还不能满足你的要求,欢迎加入补充。

      使用只需简单一句导入: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)
#(9, 11, 15)

总结

以上所述是小编给大家介绍的python itertools功能,希望对大家有所帮助!

Python 相关文章推荐
python连接sql server乱码的解决方法
Jan 28 Python
小结Python用fork来创建子进程注意事项
Jul 03 Python
利用python程序帮大家清理windows垃圾
Jan 15 Python
Python使用三种方法实现PCA算法
Dec 12 Python
python 返回列表中某个值的索引方法
Nov 07 Python
Python从单元素字典中获取key和value的实例
Dec 31 Python
python函数声明和调用定义及原理详解
Dec 02 Python
Python模拟FTP文件服务器的操作方法
Feb 18 Python
django admin 添加自定义链接方式
Mar 11 Python
使用python从三个角度解决josephus问题的方法
Mar 27 Python
基于python实现检索标记敏感词并输出
May 07 Python
Python使用tkinter制作在线翻译软件
Feb 22 Python
Python中itertools的用法详解
Feb 07 #Python
Python转换itertools.chain对象为数组的方法
Feb 07 #Python
已安装tensorflow-gpu,但keras无法使用GPU加速的解决
Feb 07 #Python
python十进制转二进制的详解
Feb 07 #Python
基于Tensorflow使用CPU而不用GPU问题的解决
Feb 07 #Python
python实现ip地址的包含关系判断
Feb 07 #Python
tensorflow:指定gpu 限制使用量百分比,设置最小使用量的实现
Feb 06 #Python
You might like
MOTOROLA 摩托罗拉 MODEL 66-XI五灯中波收音机
2021/03/02 无线电
PHP+MySQL 手工注入语句大全 推荐
2009/10/30 PHP
windows下升级PHP到5.3.3的过程及注意事项
2010/10/12 PHP
phpMyAdmin 链接表的附加功能尚未激活问题的解决方法(已测)
2012/03/27 PHP
PC端微信扫码支付成功之后自动跳转php版代码
2017/07/07 PHP
thinkPHP中钩子的使用方法实例分析
2017/11/16 PHP
javascript查找字符串中出现最多的字符和次数的小例子
2013/10/29 Javascript
利用JavaScript检测CPU使用率自己写的
2014/03/22 Javascript
js/jquery判断浏览器的方法小结
2014/09/02 Javascript
JavaScript中的console.assert()函数介绍
2014/12/29 Javascript
moment.js轻松实现获取当前日期是当年的第几周
2015/02/05 Javascript
深入解析AngularJS框架中$scope的作用与生命周期
2016/03/05 Javascript
jquery制做精致的倒计时特效
2016/06/13 Javascript
jquery层级选择器(匹配父元素下的子元素实现代码)
2016/09/05 Javascript
bootstrap 模态框(modal)实现水平垂直居中显示
2017/01/23 Javascript
AngularJS实现页面定时刷新
2017/03/14 Javascript
Vuex模块化实现待办事项的状态管理
2017/03/15 Javascript
Bootstrap缩略图的创建方法
2017/03/22 Javascript
vue.js系列中的vue-fontawesome使用
2018/02/10 Javascript
详解Angular中实现自定义组件的双向绑定的两种方法
2018/11/23 Javascript
JavaScript 判断iPhone X Series机型的方法
2019/01/28 Javascript
Vue作用域插槽实现方法及作用详解
2020/07/08 Javascript
[02:05]DOTA2完美大师赛趣味视频之看我表演
2017/11/18 DOTA
python结合selenium获取XX省交通违章数据的实现思路及代码
2016/06/26 Python
基于python元祖与字典与集合的粗浅认识
2017/08/23 Python
python编写弹球游戏的实现代码
2018/03/12 Python
Python3连接SQLServer、Oracle、MySql的方法
2018/06/28 Python
解决pyttsx3无法封装的问题
2018/12/24 Python
Python基于DB-API操作MySQL数据库过程解析
2020/04/23 Python
详解python with 上下文管理器
2020/09/02 Python
解除财产保全担保书
2014/05/20 职场文书
消防工作实施方案
2014/06/09 职场文书
学生喝酒检讨书500字
2014/11/02 职场文书
幼儿园教师节感谢信
2015/01/23 职场文书
中标通知书范本
2015/04/17 职场文书
JS新手入门数组处理的实用方法汇总
2021/04/07 Javascript