首页  >  文章  >  后端开发  >  发现 itertools

发现 itertools

WBOY
WBOY原创
2024-09-03 10:40:01594浏览

Descubriendo itertools

Itertools 是最有趣的 Python 库之一。它包含一系列受函数式语言启发的函数,用于与迭代器一起使用。

在这篇文章中,我将提到一些最引起我注意并且值得牢记的内容,以免每次都重新发明轮子。

数数

好几次我都实现了无限计数(好了,结束了
显式地在某个点用中断)使用 while True 循环。 itertools 为我们提供了更好的选择:

    from itertools import count

    for i in count(start=2, step=2):
        if i > 10:
            break
        print(i)

    2
    4
    6
    8
    10

从示例中可以看出,如果没有中断,count 将返回无穷多个数字。上面的代码大致相当于:

    i = 2

    while True:
        if i > 10:
            break

        print(i)
        i += 2

    2
    4
    6
    8
    10

分批的

一个执行非常常见操作的函数:从大小为 n 的批次中的序列中获取数据。让我们看一个例子:

from itertools import batched

    sequence = [1, 2, 3, 4, 5, 6, 7]

    for batch in batched(sequence, 2):  # lotes de tamaño 2
        print(batch)
    (1, 2)
    (3, 4)
    (5, 6)
    (7,)

需要注意的是,最后一批的大小可能小于或等于 n,如本例所示。非常有用,你不觉得吗?

成对的

另一个简单而有用的功能。给定一个序列(实际上,给定一个迭代器),它成对地给我们它的元素。

让我们通过一个例子更好地了解它:

from itertools import pairwise

    sequence = [1, 2, 3, 4, 5, 6, 7]

    for a, b in pairwise(sequence):
        print(a, b)
    1 2
    2 3
    3 4
    4 5
    5 6
    6 7

对的数量比输入序列的大小少 1。

产品

最后,对于这个简短的条目,我想谈谈产品,一个
笛卡尔积的实现。

可用于替换循环两个数据流的嵌套:

from itertools import product

    A = [1, 2, 3]
    B = [5, 6, 7]

    for a, b in product(A, B):
        print(a, b)
   1 5
    1 6
    1 7
    2 5
    2 6
    2 7
    3 5
    3 6
    3 7

接收一个参数,允许我们计算
的笛卡尔积 与自身的序列:

   from itertools import product

    A = [1, 2, 3]

    for a1, a2, a3 in product(A, repeat=3):
        print(a1, a2, a3)
    1 1 1
    1 1 2
    1 1 3
    1 2 1
    1 2 2
    1 2 3
    1 3 1
    1 3 2
    1 3 3
    2 1 1
    2 1 2
    2 1 3
    2 2 1
    2 2 2
    2 2 3
    2 3 1
    2 3 2
    2 3 3
    3 1 1
    3 1 2
    3 1 3
    3 2 1
    3 2 2
    3 2 3
    3 3 1
    3 3 2
    3 3 3

在以后的文章中,我将提到这个有用的
模块的其他功能 python 标准库。希望对你有用。

以上是发现 itertools的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn