Python 中的组合迭代器2024年8月29日 | 阅读 10 分钟 在本教程中,我们将学习 Python 中的组合迭代器。众所周知,迭代器是可迭代对象上的对象,迭代器用于遍历所有可迭代值。生成器也被称为高级迭代器,但它们不能返回完整结果,而是通过 yield 返回结果。生成器可以像函数一样递归。我们将学习 itertools 模块以及如何获得无限迭代器。我们还将讨论 Python 迭代器如何终止最短的输入序列。 那么,让我们来理解一下 Python 的 itertools 模块。 Python itertools 模块Python 的 itertools 模块提供了创建迭代器的功能,以实现高效的循环。有多种类型的迭代器,有些是无限迭代器,有些则在最短的输入序列上终止。还有一些是组合迭代器。 让我们简要了解一下无限迭代器。 Python 中的无限迭代器顾名思义,无限迭代器可以无限次地生成值。有三种类型的无限迭代器,让我们来了解以下函数。
count() 方法接受两个参数 start 和 step。start 参数从给定的起始数字开始无限打印。step 参数是可选的,如果提供了步长,则会跳过给定的数字;默认步长为一。让我们通过下面的例子来理解。 示例 - 输出 3 6 9 12 15 18 21 24 27 30 33 示例 - 使用一个参数 输出 3 6 9 12 15 18 21 Traceback (most recent call last): File "d:/Python Project/bubble_sort.py", line 308, in
cycle() 函数按传递的顺序打印所有值。当所有可迭代元素都被打印后,它会从头重新开始打印值。让我们通过下面的例子来理解。 示例 - 输出 A B C A B C A B C A B C A B C A B C A B C 示例 - 输出 red green blue red green blue red green blue red green blue red green blue red green blue red green blue red green blue red green blue red green blue red green blue red green blue red green blue red green blue File "d:/Python Project/iterators.py", line 32, in 示例 - 2:使用 next() 方法 输出 Java T Point Java T Point Java T Point Java T Point
它会无限次地重复打印传入的值。如果提供了可选的关键字参数 num,它会重复打印 num 次。让我们通过下面的例子来理解。 示例 - 输出 [100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100] 示例 - 2 输出 Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Blue Traceback (most recent call last): File "d:/Python Project/iterators.py", line 332, in 这里我们已经讨论了无限迭代器的三种方法。现在我们将学习组合迭代器。 组合迭代器组合迭代器是操作的排列,以及离散数学元素的选择。它是一种递归生成器,用于简化排列、组合和笛卡尔积等组合结构。让我们来了解组合迭代器。
这些迭代器计算输入可迭代对象的笛卡尔积。我们需要指定可选的 repeat 关键字参数来计算一个可迭代对象与其自身的乘积。它以排序的元组形式返回结果。让我们通过下面的例子来理解。 示例 - 输出 The cartesian product using repeat: [(2, 2), (2, 4), (4, 2), (4, 4)] The cartesian product of the containers: [('Learn', '3'), ('from', '3'), ('JavaTpoint', '3')] The cartesian product of the containers: [('A', 3), ('A', 4), ('B', 3), ('B', 4)] 示例 - 2 输出 ('V', 'Z', 'X', 'Y', 'V', 'Y') ('V', 'Z', 'X', 'Y', 'V', 'Z') ('V', 'Z', 'X', 'Y', 'X', 'Y') ('V', 'Z', 'X', 'Y', 'X', 'Z') ('V', 'Z', 'X', 'Z', 'V', 'Y') ('V', 'Z', 'X', 'Z', 'V', 'Z') ('V', 'Z', 'X', 'Z', 'X', 'Y') ('V', 'Z', 'X', 'Z', 'X', 'Z') ('X', 'Y', 'V', 'Y', 'V', 'Y') ('X', 'Y', 'V', 'Y', 'V', 'Z') ('X', 'Y', 'V', 'Y', 'X', 'Y') ('X', 'Y', 'V', 'Y', 'X', 'Z') ('X', 'Y', 'V', 'Z', 'V', 'Y') ('X', 'Y', 'V', 'Z', 'V', 'Z') ('X', 'Y', 'V', 'Z', 'X', 'Y') ('X', 'Y', 'V', 'Z', 'X', 'Z') ('X', 'Y', 'X', 'Y', 'V', 'Y') ('X', 'Y', 'X', 'Y', 'V', 'Z') ('X', 'Y', 'X', 'Y', 'X', 'Y') ('X', 'Y', 'X', 'Y', 'X', 'Z') ('X', 'Y', 'X', 'Z', 'V', 'Y') ('X', 'Y', 'X', 'Z', 'V', 'Z') ('X', 'Y', 'X', 'Z', 'X', 'Y') ('X', 'Y', 'X', 'Z', 'X', 'Z') ('X', 'Z', 'V', 'Y', 'V', 'Y') ('X', 'Z', 'V', 'Y', 'V', 'Z') ('X', 'Z', 'V', 'Y', 'X', 'Y') ('X', 'Z', 'V', 'Y', 'X', 'Z') ('X', 'Z', 'V', 'Z', 'V', 'Y') ('X', 'Z', 'V', 'Z', 'V', 'Z') ('X', 'Z', 'V', 'Z', 'X', 'Y') ('X', 'Z', 'V', 'Z', 'X', 'Z') ('X', 'Z', 'X', 'Y', 'V', 'Y') ('X', 'Z', 'X', 'Y', 'V', 'Z') ('X', 'Z', 'X', 'Y', 'X', 'Y') ('X', 'Z', 'X', 'Y', 'X', 'Z') ('X', 'Z', 'X', 'Z', 'V', 'Y') ('X', 'Z', 'X', 'Z', 'V', 'Z') ('X', 'Z', 'X', 'Z', 'X', 'Y') ('X', 'Z', 'X', 'Z', 'X', 'Z') 示例 - 3 输出 (1, 4) (1, 5) (1, 6) (2, 4) (2, 5) (2, 6) (3, 4) (3, 5) (3, 6) 让我们看另一个例子。 示例 - 4 输出 ('U', 'W', 'Y') ('U', 'W', 'Z') ('U', 'X', 'Y') ('U', 'X', 'Z') ('V', 'W', 'Y') ('V', 'W', 'Z') ('V', 'X', 'Y') ('V', 'X', 'Z')
permutation() 函数以字典序生成可迭代对象的所有可能排列,并返回唯一元素。它使用元素的位置,而不是值。它接受一个可迭代对象和一个 group_size;如果 group_size 的值未给出或等于 None,则 group_size 的值将成为可迭代对象的长度。让我们通过下面的例子来理解。 示例 - 输出 All the permutations is: [(1, 'JavaTpoint'), ('JavaTpoint', 1)] All the permutations is: [('C', 'D'), ('D', 'C')] All the permutations is: [(0, 1), (0, 2), (0, 3), (0, 4), (0, 5), (0, 6), (0, 7), (1, 0), (1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (1, 7), (2, 0), (2, 1), (2, 3), (2, 4), (2, 5), (2, 6), (2, 7), (3, 0), (3, 1), (3, 2), (3, 4), (3, 5), (3, 6), (3, 7), (4, 0), (4, 1), (4, 2), (4, 3), (4, 5), (4, 6), (4, 7), (5, 0), (5, 1), (5, 2), (5, 3), (5, 4), (5, 6), (5, 7), (6, 0), (6, 1), (6, 2), (6, 3), (6, 4), (6, 5), (6, 7), (7, 0), (7, 1), (7, 2), (7, 3), (7, 4), (7, 5), (7, 6)] 示例 - 2 输出 ('A', 'B', 'C', 'D') ('A', 'B', 'D', 'C') ('A', 'C', 'B', 'D') ('A', 'C', 'D', 'B') ('A', 'D', 'B', 'C') ('A', 'D', 'C', 'B') ('B', 'A', 'C', 'D') ('B', 'A', 'D', 'C') ('B', 'C', 'A', 'D') ('B', 'C', 'D', 'A') ('B', 'D', 'A', 'C') ('B', 'D', 'C', 'A') ('C', 'A', 'B', 'D') ('C', 'A', 'D', 'B') ('C', 'B', 'A', 'D') ('C', 'B', 'D', 'A') ('C', 'D', 'A', 'B') ('C', 'D', 'B', 'A') ('D', 'A', 'B', 'C') ('D', 'A', 'C', 'B') ('D', 'B', 'A', 'C') ('D', 'B', 'C', 'A') ('D', 'C', 'A', 'B') ('D', 'C', 'B', 'A') 正如我们在上面的代码中看到的,我们没有传递第二个参数给它,所以它取了可迭代对象的元组的长度。在下面的示例中,我们传递了 3 作为长度。 示例 - 3 输出 ('A', 'B', 'C') ('A', 'B', 'D') ('A', 'C', 'B') ('A', 'C', 'D') ('A', 'D', 'B') ('A', 'D', 'C') ('B', 'A', 'C') ('B', 'A', 'D') ('B', 'C', 'A') ('B', 'C', 'D') ('B', 'D', 'A') ('B', 'D', 'C') ('C', 'A', 'B') ('C', 'A', 'D') ('C', 'B', 'A') ('C', 'B', 'D') ('C', 'D', 'A') ('C', 'D', 'B') ('D', 'A', 'B') ('D', 'A', 'C') ('D', 'B', 'A') ('D', 'B', 'C') ('D', 'C', 'A') ('D', 'C', 'B')
它不重复地打印可迭代对象的所有可能组合。它接受一个可迭代对象和一个 group_size;如果 group_size 的值未给出或等于 None,则 group_size 的值将成为可迭代对象的长度。让我们通过下面的例子来理解。 示例 - 输出 All the combination is: [('D', 2)] All the combination is: [('A', 'B'), ('A', 'C'), ('A', 'D'), ('B', 'C'), ('B', 'D'), ('C', 'D')] All the combination is: [(0,), (1,), (2,), (3,), (4,), (5,), (6,)] 示例 - 输出 ('A', 'B') ('A', 'C') ('A', 'D') ('B', 'C') ('B', 'D') ('C', 'D') 让我们看另一个例子。 示例 - 输出 (0, 1, 2) (0, 1, 3) (0, 1, 4) (0, 1, 5) (0, 1, 6) (0, 1, 7) (0, 2, 3) (0, 2, 4) (0, 2, 5) (0, 2, 6) (0, 2, 7) (0, 3, 4) (0, 3, 5) (0, 3, 6) (0, 3, 7) (0, 4, 5) (0, 4, 6) (0, 4, 7) (0, 5, 6) (0, 5, 7) (0, 6, 7) (1, 2, 3) (1, 2, 4) (1, 2, 5) (1, 2, 6) (1, 2, 7) (1, 3, 4) (1, 3, 5) (1, 3, 6) (1, 3, 7) (1, 4, 5) (1, 4, 6) (1, 4, 7) (1, 5, 6) (1, 5, 7) (1, 6, 7) (2, 3, 4) (2, 3, 5) (2, 3, 6) (2, 3, 7) (2, 4, 5) (2, 4, 6) (2, 4, 7) (2, 5, 6) (2, 5, 7) (2, 6, 7) (3, 4, 5) (3, 4, 6) (3, 4, 7) (3, 5, 6) (3, 5, 7) (3, 6, 7) (4, 5, 6) (4, 5, 7) (4, 6, 7) (5, 6, 7)
它与 combination() 类似,但它可能包含单个元素本身。它从可迭代对象的元素中返回长度为 n 的子序列,其中 n 是一个决定生成组合长度的参数。让我们通过下面的例子来理解。 示例 - 输出 All the combination is: [(1, 1), (1, 2), (2, 2)] All the combination is: [('A', 'A'), ('A', 'B'), ('A', 'C'), ('A', 'D'), ('B', 'B'), ('B', 'C'), ('B', 'D'), ('C', 'C'), ('C', 'D'), ('D', 'D')] All the combination is: [(0,), (1,), (2,), (3,), (4,), (5,), (6,)] 在最短输入序列上终止的迭代器以下是一些重要的、也用作迭代器的方法。让我们来了解以下方法。
它用于创建一个累积和的迭代器。换句话说,它累积了指定二元函数的结果。让我们通过下面的例子来理解。 示例 - 输出 2 3 3 4 4 6 9 14 示例 - 2 输出 1 2 6 24 120 720 5040 40320 362880 3628800
chain() 函数逐个迭代给定的可迭代对象。当一个可迭代对象终止时,它会移动到下一个可迭代对象。 示例 - 输出 H e l l o W o r l d H o w a r e y o u
它创建一个过滤器迭代器,可以过滤掉 data 中选择器值为 True 的元素。让我们通过下面的例子来理解。 示例 - 输出 A C D F
dropwhile() 方法只要谓词为 True 就从可迭代对象中删除元素。如果为 False,它将开始返回所有元素。让我们通过下面的例子来理解。 示例 - 输出 10 12 67 9 5 39 29 91 还有许多其他方法,但我们已经讨论了一些基本方法。 结论我们已经讨论了 Python 中迭代器的扩展版本。我们提到了组合迭代器和无限迭代器,这些迭代器在数学运算中非常有用。 |
我们请求您订阅我们的新闻通讯以获取最新更新。