python itertools功能详解

介绍

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功能详解相关推荐

  1. python后端开发框架加密_Flask框架实现的前端RSA加密与后端Python解密功能详解

    本文实例讲述了Flask框架实现的前端RSA加密与后端Python解密功能.分享给大家供大家参考,具体如下: 前言 在使用 Flask 开发用户登录API的时候,我之前都是明文传输 username ...

  2. python写网页前端交易rsa加密_Flask框架实现的前端RSA加密与后端Python解密功能详解!...

    本文实例讲述了Flask框架实现的前端RSA加密与后端Python解密功能.分享给大家供大家参考,具体如下: 前言 在使用 Flask 开发用户登录API的时候,我之前都是明文传输 username ...

  3. python itertools模块详解

    目录 简介 无穷迭代器 count() cycle() repeat() 有限迭代器 chain() groupby() accumulate() 组合迭代器 product() permutatio ...

  4. python itertools 使用详解

    文章目录 (一)itertools 的所有函数说明 无穷迭代器包含的 函数列表 1.count( start [,step]) 2.cycle( iterable ) 3.repeat( elem [ ...

  5. python编程用户登陆c_django实现用户登陆功能详解

    简介: Python下有许多款不同的 Web 框架.Django是重量级选手中最有代表性的一位.许多成功的网站和APP都基于Django. Django是一个开放源代码的Web应用框架,由Python ...

  6. python 数列筛选_对numpy中的数组条件筛选功能详解

    在程序设计中,时常会遇到数据的唯一化.相同.相异信息的提取等工作,在格式化的向量存储矩阵中南,numpy能够提供比较不错的快速处理功能. 1,唯一化的实现: In [63]: data = np.ar ...

  7. python模拟手写笔迹_Python实现基于KNN算法的笔迹识别功能详解

    本文实例讲述了Python实现基于KNN算法的笔迹识别功能.分享给大家供大家参考,具体如下: 需要用到: Numpy库 Pandas库 手写识别数据 点击此处本站下载. 数据说明: 数据共有785列, ...

  8. Python正则表达式re.sub功能详解

    Python正则表达式re.sub功能详解 正则表达式:regular expression, 缩写为re;  sub即substitute(替换) ; re.sub 语法结构: re.sub (pa ...

  9. python微信自动发消息_Python使用微信itchat接口实现查看自己微信的信息功能详解...

    Python使用微信itchat接口实现查看自己微信的信息功能详解 发布时间:2020-09-09 04:20:11 来源:脚本之家 阅读:134 本文实例讲述了Python使用微信itchat接口实 ...

最新文章

  1. 灰度发布系统架构设计
  2. ArcGIS for qml - 地址地标转换为经纬度(地理编码)
  3. 图像孔洞填充与小连通域的删除
  4. 战友!6.19决战光荣日,一个真实的魔兽世界在等你!
  5. 光纤收发器通常具有哪些特点?
  6. python字典嵌套字典的情况下获取某个key的value
  7. java commons logging_Java日志介绍(5)-commons-logging
  8. 百度地图隐藏地名_官宣,鲁能公馆是“怪地名”,以后我只是秦新名邸
  9. 图解形态学Morphological
  10. 基于Ubuntu系统下的Hadoop 环境搭建(新手可尝)
  11. 解决IDM浏览器插件强制更新后无法继续使用的问题
  12. StaMPS 在 SBAS 第一步报错 unable to read file ‘../slcosfactor.1.in‘ no such file or directory
  13. rs485串口转网口设置
  14. STL之容器——介绍
  15. 生成一个6位数的随机密码,且需要包括字符、数字、特殊符号
  16. (附源码)node.js游云旅游网站 毕业设计 231547
  17. c语言 教学大纲,C语言教学大纲 ).doc
  18. 全民分销时代,企业如何运营分销平台?
  19. download sources报错: Cannot connect to the Maven process. Try again later. If the problem persists
  20. 星巴克——starbuck

热门文章

  1. Rust Rpc框架
  2. 电视如何启动微型计算机,智能电视怎么做到开机自启动?详细教程一招轻松搞定...
  3. java.lang.NoClassDefFoundError: Failed resolution of: Landroid/support/v4/app
  4. 1分钟了解 IIFE
  5. 接口反应慢定位及处理方法
  6. c语言中null未声明,错误:此范围内未声明“NULL”(示例代码)
  7. SqlDataSource的Selecting事件使用心得
  8. Bmob后端云的集成需要注意的坑(番外)
  9. 日常英语口语学习1:在家中——从起床到出门
  10. FreeBSD 下载 Exif扩展