#!/usr/bin/env python
# coding:UTF-8


"""
@version: python3.x
@author:曹新健
@contact: 617349013@qq.com
@software: PyCharm
@file: itertools模块.py
@time: 2018/11/7 11:15
"""
"""
python标准链接库中提供了itertools模块,当中许多函数可以协助创建生成器和迭代器
"""
import  itertools

"""
1、itertools.cycle(iterable):创建一个迭代器,对iterable中的元素反复执行循环操作
    代码示例:
    cycle_g = itertools.cycle("abcd")
    for i in cycle_g:
        print(i)
    说明上述代码会循环打印 a b c d a b c ....,一直循环下去
2、itertools.repeat(object [,times]):创建一个迭代器,重复生成object,times(如果已提供)指定重复计数,
   如果未提供times,将无止尽返回该对象
    代码示例:
    r = itertools.repeat("Good",5)
    for i in r:
        print(i,sep="",end="")
    #上述代码打印GoodGoodGoodGoodGood
3、itertools.count(n[,m]):创建一个迭代器,生成从n开始的连续整数,如果忽略n,则从0开始计算。第二个参数
   可省略,代表步长。
    代码示例:
    cn = itertools.count(5,2)
    print(next(cn))
    print(next(cn))
    print(next(cn))
    上述代码返回5 7 9即迭代器从5开始无限迭代,步长为2
4、itertools.accumulate(可迭代对象[, 函数]):accumulate 迭代器将返回累计求和结果,或者传入两个参数的话,
   由传入的函数累积计算的结果。默认设定为相加。
    代码示例:
    print(list(itertools.accumulate([1,2,3,4,5])))
    #打印[1, 3, 6, 10, 15]
    print(list(itertools.accumulate([1,2,3,4,5],int.__mul__)))
    #打印[1, 2, 6, 24, 120]
5、itertools.chain(iter1, iter2, ..., iterN):创建一个新迭代器来将所有的迭代器链接起来逐一返回,直到全
   部返回完毕
    代码示例:
    print(list(itertools.chain("ABC",[1,2,3])))
    #返回['A', 'B', 'C', 1, 2, 3]
6、itertools.chain.from_iterable(iterables):同itertools.chain(iter1, iter2, ..., iterN)功能类似
7、itertools.dropwhile(predicate, iterable):创建一个迭代器,只要函数predicate(item)为True,就丢弃
   iterable中的项,如果predicate返回False,就会生成iterable的后续所有项。
    代码示例:
    print(list(itertools.dropwhile(lambda x: x < 5,[1,2,4,7,3,8])))
    #返回[7, 3, 8]
8、itertools.takewhile(predicate, iterable):创建一个迭代器,生成iterable中predicate(item)为True的项
   ,只要predicate计算为False,迭代就会立即停止
    代码示例:
    print(list(itertools.takewhile(lambda x: x < 5,[1,2,4,7,3,8])))
    #返回[1, 2, 4]
9、itertools.filterfalse(predicate, iterable):创建一个迭代器,仅生成iterable中predicate(item)为False的
   项。
    代码示例:
    print(list(itertools.filterfalse(lambda x: x %2,[1,2,4,7,3,8])))
    #返回[2, 4, 8]
10、itertools.groupby(iterable [,key]):创建一个迭代器,对iterable生成的相邻项进行分组。此函数返回的迭代
    器生成元素(key, group),其中key是分组的键值,group是迭代器,生成组成该组的所有项。
     代码示例:
     names = ["cxj","wcq","hj","caoxinjian","wuchangquan","hanjia","djj","duanjiajing"]
     for key,items in itertools.groupby(names,lambda name:len(name)):
        print(key,list(items))
    '''
    返回值:
    3 ['cxj', 'wcq']
    2 ['hj']
    10 ['caoxinjian']
    11 ['wuchangquan']
    6 ['hanjia']
    3 ['djj']
    11 ['duanjiajing']
    '''
11、itertools.combinations(iterable, r):创建一个迭代器,返回iterable中所有长度为r的子序列,返回的子序
    列中的项按输入iterable中的顺序排序。
     代码示例:
     for i in itertools.combinations([1,2,3,4], 3):
        print(i)
     '''
     返回值:
     (1, 2, 3)
     (1, 2, 4)
     (1, 3, 4)
     (2, 3, 4)
     '''
12、itertools.islice(iterable, [start, ] stop [, step]):创建一个迭代器,生成项的方式类似于切片返回值:
    iterable[start : stop : step],将跳过前start个项,迭代在stop所指定的位置停止,step指定用于跳过项
    的步幅。与切片不同,负值不会用于任何start,stop和step,如果省略了start,迭代将从0开始,如果省略了
    step,步幅将采用1。
     代码示例:
     print(list(itertools.islice([1,2,3,4,5,6],2)))
     print(list(itertools.islice([1,2,3,4,5,6],2,4)))
     print(list(itertools.islice([1,2,3,4,5,6],2,None)))
     print(list(itertools.islice([1,2,3,4,5,6],2,None,2)))
     '''
     返回值:
     [1, 2]
     [3, 4]
     [3, 4, 5, 6]
     [3, 5]
     '''
13、itertools.permutations(iterable [,r]):创建一个迭代器,返回iterable中所有长度为r的项目序列,如果省
    略了r,那么序列的长度与iterable中的项目数量相同.
     示例代码:
     for i in itertools.permutations([1,2,3,4], 3):
        print(i)
     '''
     返回值:
     (1, 2, 3)
     (1, 2, 4)
     (1, 3, 2)
     (1, 3, 4)
     (1, 4, 2)
     (1, 4, 3)
     (2, 1, 3)
     ......
     '''
14、itertools.product(iter1, iter2, ... iterN, [repeat=1]):创建一个迭代器,生成表示item1,item2等中的
    项目的笛卡尔积的元组,repeat是一个关键字参数,指定重复生成序列的次数。
     示例代码:
     print(list(itertools.product(range(2), repeat=1)))
     print(list(itertools.product(range(2), repeat=2)))
     print(list(itertools.product(range(2), repeat=3)))
     print(list(itertools.product(range(3), repeat=2)))
     print(list(itertools.product('AB', 'xy')))
     product() --> 
     '''
     [0, 1]
     [(0,), (1,)]
     [(0, 0), (0, 1), (1, 0), (1, 1)]
     [(0, 0, 0), (0, 0, 1), (0, 1, 0), (0, 1, 1), (1, 0, 0), (1, 0, 1), (1, 1, 0), (1, 1, 1)]
     [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
     [('A', 'x'), ('A', 'y'), ('B', 'x'), ('B', 'y')]
     '''
15、itertools.starmap(func [, iterable]):创建一个迭代器,生成值func(*item),其中item来自iterable,只有
    当iterable生成的项适用于这种调用函数的方式时,此函数才有效。
     示例代码:
     print(list(itertools.starmap(pow, [(2,3), (3,3), (10,3)])))
     #返回值:[8, 27, 1000]
16、itertools.tee(iterable [, n]):从iterable创建n个独立的迭代器,创建的迭代器以n元组的形式返回,n的默
    认值为2,此函数适用于任何可迭代的对象,但是,为了克隆原始迭代器,生成的项会被缓存,并在所有新创建
    的迭代器中使用,一定要注意,不要在调用tee()之后使用原始迭代器iterable,否则缓存机制可能无法正确工
    作。
     示例代码:
     for i in itertools.tee([1,2,3,4],3):
        print(list(i))
     
     '''
     返回值:
     [1, 2, 3, 4]
     [1, 2, 3, 4]
     [1, 2, 3, 4]
     '''
"""

 

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐