• python itertools 用法


    1、介绍
    itertools 是python的迭代器模块,itertools提供的工具相当高效且节省内存。
    使用这些工具,你将能够创建自己定制的迭代器用于高效率的循环。
    - 无限迭代器
     itertools包自带了三个可以无限迭代的迭代器。这意味着,当你使用他们时,你要知道要的到底是最终会停止的迭代器,还是需要无限地迭代鞋去。
    (1)count(初值=0, 步长=1):count 迭代器会返回从传入的起始参数开始的均匀间隔的数值。count 也可以接收指定的步长参数。我们来看一个简单的例子:

     1 from itertools import count
     2 for i in count():
     3     print i
     4     if i > 10:
     5         break
     6         
     7 #从0开始循环
     8 0
     9 1
    10 2
    11 3
    12 4
    13 5
    14 6
    15 7
    16 8
    17 9
    18 10
    19 11

    (2)islice(count(10), 5):从 10 开始,输出 5 个元素后结束。islice 的第二个参数控制何时停止迭代。但其含义并不是”达到数字 5 时停止“,而是”当迭代了 5 次之后停止“。

     1 from itertools import count,islice
     2 for i in islice(count(10),5):
     3     print i
     4 
     5 #从10开始循环迭代5次后退出循环
     6 10
     7 11
     8 12
     9 13
    10 14

    (3)cycle:这里我们创建了一个 for 循环,使其在三个字母 XYZ 间无限循环。当然,我们并不真地想要永远循环下去,所以我们添加了一个简单的计数器来跳出循环。

     1 from itertools import cycle
     2 count = 0
     3 for item in cycle('XYZ'):
     4     if count > 7:
     5         break
     6     print item
     7     count = count + 1
     8 
     9 #在xyz之间无限循环
    10 X
    11 Y
    12 Z
    13 X
    14 Y
    15 Z
    16 X

    (4)accumulate(可迭代对象[, 函数])(适用于python3)
       accumulate 迭代器将返回累计求和结果,或者传入两个参数的话,由传入的函数累积计算的结果。默认设定为相加

      这里,我们 导入了 accumulate,然后传入 10 个数字,0-9。迭代器将传入数字依次累加,所以第一个是 0 ,第二个是 0+1, 第三个是 1+2,如此下去。

      现在我们导入 operator 模块,然后添加进去:

    1 >>> from itertools import accumulate
    2 >>> list(accumulate(range(10)))
    3 [0, 1, 3, 6, 10, 15, 21, 28, 36, 45]

      这里我们传入了数字 1-4 到 accumulate 迭代器中。我们还传入了一个函数:operator.mul,这个函数将接收的参数相乘。

      所以每一次迭代,迭代器将以乘法代替除法(1×1=1, 1×2=2, 2×3=6, 以此类推)

    1 from itertools import accumulate
    2 import operator
    3 >>> list(accumulate(range(1, 6), operator.mul))
    4 [1, 2, 6, 24, 120]

    (5)chain(*可迭代对象)
        chain 可以把一组迭代对象串联起来,形成一个更大的迭代器:

     1 from itertools import chain
     2 for c in chain(['a','b','cd'],['ef',123],'XYZ'):
     3     print c
     4 
     5 #输出
     6 a
     7 b
     8 cd
     9 ef
    10 123
    11 X
    12 Y
    13 Z
    14 
    15 #备注类似于多个list叠加
    16 mm = ['a','b','cd'] + ['ef',123] + ['X','Y','Z']

     (6)groupby 
         
    把迭代器中相邻的重复元素挑出来放在一起.

     1 from itertools import groupby
     2 
     3 for key, group in groupby('AAABBBCCAAA'):
     4     print key,list(group)
     5 
     6 #输出
     7 A ['A', 'A', 'A']
     8 B ['B', 'B', 'B']
     9 C ['C', 'C']
    10 A ['A', 'A', 'A']
  • 相关阅读:
    uva 10192 Vacation(最长公共子)
    SolrCloud应用简介
    2015第43周一solr相关概念
    2015第42周日
    2015第42周六Pgsql全文索引
    Java注解
    2015第42周四
    2015第42周三
    JS原型函数相关基础知识
    2015第42周一爬虫与反爬虫
  • 原文地址:https://www.cnblogs.com/gide/p/12307571.html
Copyright © 2020-2023  润新知