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中文网其他相关文章!