zoukankan      html  css  js  c++  java
  • Python学习笔记—itertools模块

    这篇是看wklken的《Python进阶-Itertools模块小结》 学习itertools模块的学习笔记

    在看itertools中各函数的源代码时,刚开始还比较轻松,但后面看起来就比较费劲。。。

    1、itertools.count(start=0,step=1)

        此函数用来创建一个迭代器,生成从n开始的连续整数,如果忽略n,则从0开始计算

      如果超出了sys.maxint,计数器将溢出并继续行-sys.maxint-1开始计算

      定义:

    def count(start=0, step=1):
        #count(10) --> 10, 11, 12, 13.....
        # count(2.5, 0.5)--> 2.5, 3.0, 3.5 ....
        n = start
        while True:
            yield n
            n += step

      使用:

    from itertools import *
    
    for i in izip(count(i), ['a', 'b', 'c']):
        print i
    
    out:
    (1, 'a')
    (2, 'b')
    (3, 'c')

    2、itertools.cycle(iterable)

      创建一个迭代器,对iterable中的元素反复执行循环操作,内部会生成iterable中的元素的一个副本, 次副本用于返回循环中的重复项

      定义:

    def cycle(iterable):
        # cycle('ABCD') --> A B C D A B C D ....
        saved = []
        for element in iterable:
            yield element
            saved.append(element)
        while saved:
            for element in saved:
                yield element

      使用:

    from itertools import *
    
    i = 0
    for item in cycle(['a', 'b', 'c']):
        i += 1
        if i == 6:
            break
        print (i, item)
    
    out:
    (1, 'a')
    (2, 'b')
    (3, 'c')
    (4, 'a')
    (5, 'b')

    3、itertools.repeat(object[, times])

      创建一个迭代器,重复生成object, times (如果已提供) 指定重复计数, 如果未提供times, 将无尽返回该对象

      定义:

    def repeat(object, times=None):
        # repeat(10, 3) --> 10, 10, 10
        if times is None:
            while True:
                yield object
        else:
            for i in xrange(time):
                yield object

      使用:

    from itertools import *
    
    for i in repeat('over-and-over', 3):
        print i
    
    out:
    over-and-over
    over-and-over
    over-and-over

    4、itertools.chain(*iterables)

      将多个迭代器作为参数,但只返回单个迭代器,它产生所有参数迭代器的内容,就好像他们来自于一个单一的序列。

      定义:

    def chain(*iterables):
        # chain('ABC', 'DEF') --> A B C D E F
        for it in iterables:
            for element in it:
                yield element

      使用:

    from itertools import *
    
    for i in chain([1, 2, 3], ['a', 'b', 'c']):
        print i
    
    out:
    1
    2
    3
    a
    b
    c

    5、itertools.compress(data, selectors)

    提供一个选择列表, 对原始数据进行筛选

    定义:

    def compress(data, selectors):
        # compress('ABCDEF', [1, 0, 1, 0, 1, 1]) --> A C E F
        return (d for d, s in izip(data, selectors) if s)

     6、itertools.product(*iterables[, repeat])

    笛卡尔积

    创建一个迭代器,生成item1, item2等中的项目的笛卡尔积的元组, repeat是一个关键字参数,指定重复生成序列的次数。

    def product(*args, **kwds):
        # product('ABCD', 'xy') --> Ax, Ay, Bx, By, Cx, Cy, Dx, Dy
        # product(range(2), repeat=3) --> 000 001 010 011 100 101 110 111
        pools = map(tuple, args) * kwds.get(repeat, 1)
        result = [[]]
        for pool in pools:
            result = [x+[y] for x in result for y in pool]
        for prod in result:
            yield tuple(prod)
    import itertools
    a = (1, 2, 3)
    b = ('a', 'b', 'c')
    c = itertools.product(a, b)
    for elem in c:
        print elem
    
    out:
    (1, 'A')
    (2, 'B')
    (3, 'C')
    (2, 'A')
    (2, 'B')
    (2, 'C')
    (3, 'A')
    (3, 'B')
    (3, 'C')

    这个模块函数有好多,有好多敲了一遍忘了保存,懒得再敲了,但也记得差不多了,所以就这样吧

  • 相关阅读:
    gcc编译常用选项
    汇编指令随笔
    VIM简单操作
    Linux编译阻塞型驱动遇到'TASK_NORMAL' undeclared (first use in this function)问题解决办法
    Linux中断流程分析
    Linux驱动开发之LED驱动
    函数(三)
    函数(二)
    文件和函数(一)
    文件处理和字符编码
  • 原文地址:https://www.cnblogs.com/siriuswang/p/4633703.html
Copyright © 2011-2022 走看看