py3.7标准库-itertools

本文详细介绍了Python3.7标准库itertools中的各种函数,如count、cycle、repeat、accumulate等,这些函数能帮助我们高效地处理迭代对象。itertools库提供了无限迭代器和组合计算,适用于各种迭代操作,包括计数、循环、过滤、分组等场景。
摘要由CSDN通过智能技术生成

Python的内建模块itertools提供了非常有用的用于操作迭代对象的函数。

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

创建一个迭代器,生成从n开始的连续整数,如果忽略n,则从0开始计算(注意:此迭代器不支持长整数)

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

当使用浮点数进行计数时,有时可以通过替换乘法代码来实现更高的准确率,例如:(start + step * i for i in count())

该方法等价于:

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

itertools.cycle(iterable)

创造一个迭代器,复制从当前迭代器返回的每一个元素并将其保存到创建的迭代器中。当当前迭代器耗尽时,从创造的迭代器循环返回元素。

简单理解就是,传入一个序列,无限循环下去

大致相当于:

def cycle(iterable):
    # cycle('ABCD') --> A B C D 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

itertools.repeat(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 range(times):
            yield object

repeat的一个常见用法是提供一个用于map或zip的常数流:

>>> list(map(pow, range(10), repeat(2)))
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

itertools.accumulate(iterable[, func])

创建一个迭代器,它返回计算的累积和,或其他二进制函数的计算结果(这个二进制函数可以通过func参数指定)。如果指定了func参数,必须保证这个参数对应的函数可以接收两个参数。

大致相当于:

def accumulate(iterable, func=operator.add):
    'Return running totals'
    # accumulate([1,2,3,4,5]) --> 1 3 6 10 15
    # accumulate([1,2,3,4,5], operator.mul) --> 1 2 6 24 120
    it = iter(iterable)
    try:
        total = next(it)
    except StopIteration:
        return
    yield total
    for element in it:
        total = func(total, element)
        yield total

如果很难理解,可以这样理解:

对于默认func来说,结果就是[p0, p0+p1, p0+p1+p2, …]

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

classmethod chain.from_iterable(iterable)

改变chain()的结构,从一个懒加载的可迭代对象中获取输入值。大致相当于:

def from_iterable(iterables):
    # chain.from_iterable(['ABC', 'DEF']) --> A B C D E F
    for it in iterables:
        for element in it:
            
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值