Python 组合迭代器
在本教程中,我们将学习Python中的组合迭代器。我们知道,迭代器是可迭代对象上的对象,迭代器用于遍历所有可迭代的值。生成器也被称为高级迭代器,但它们无法返回完整的结果,而是产生结果。生成器可以是递归的,就像函数一样。我们将学习itertools模块以及如何获得无限迭代器。我们还将讨论Python迭代器如何终止最短的输入序列。
所以让我们了解Python的itertools模块。
Python Itertools模块
Python的itertools模块提供了创建用于高效循环的迭代器的功能。有多种类型的迭代器,其中一些是无限迭代器,并且一些仅在最短的输入序列上终止。还有一些是组合迭代器。
让我们简单了解一下无限迭代器。
Python中的无限迭代器
顾名思义,无限迭代器可以无限次生成值。有三种类型的无限迭代器,让我们了解以下函数。
count() 方法接受两个参数 start 和 step。 start参数从给定的起始数字开始打印并无限打印。step参数是可选的,如果给定步长,给定的数字将被跳过,默认步长为1。让我们理解以下示例。
示例
输出:
示例有一个参数
输出:
cycle() 函数按顺序打印所有的值。如果所有可迭代元素都已打印,则从头开始重新打印值。让我们理解以下示例。
示例
输出:
示例
输出:
示例2:使用next()方法
输出:
它无限次重复打印传递的值。如果给定了可选关键字num,它会重复打印num次数。让我们理解以下示例。
示例
输出:
示例2:
输出:
在这里,我们讨论了无限迭代器的三种方法。现在我们将学习组合迭代器。
组合迭代器
组合迭代器是操作的排列和离散数学元素的选择。它是一种递归生成器,用于简化诸如排列、组合和笛卡尔乘积等组合结构。让我们了解组合迭代器。
- product(*iterables, repeat=1)
这些迭代器计算输入迭代器的笛卡尔乘积。我们需要指定可选的重复关键字参数以计算可迭代对象与其自身的乘积。它以排序的顺序返回元组。让我们理解以下示例。
示例
输出:
示例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:
输出:
让我们来看另一个示例。
示例4:
输出:
- permutation(iterables*, group_size=None)
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')
- combinations(iterable, r)
它以无重复的方式打印出可迭代对象的所有可能组合。它接受一个可迭代的对象和 group_size, 如果没有给出或者等于 None, 则 group_size 的值变为可迭代对象的长度。让我们来理解以下示例。
示例
输出:
示例
输出:
再来看一个示例。
示例—
输出:
(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)
- combinations_with_replacement(iterable, r)
与combination()类似,但可能包括单个元素本身。当n是一个参数,用于确定生成组合的长度时,它会从可迭代对象的元素中返回长度为n的子序列。让我们来看下面的示例。
示例
输出:
迭代器在最短输入序列上终止
下面是一些重要的方法,也被用作迭代器。让我们理解以下方法。
- accumulate(iterable, [, func]) –
它用于生成一个累积和的迭代器。换句话说,它累积了指定二元函数的结果。让我们理解以下示例。
示例
输出:
示例2:
输出:
chain()函数逐个迭代给定的可迭代对象。当一个可迭代对象结束时,它会转移到下一个可迭代对象。
示例
输出:
- compress(data, selectors) –
它使迭代器成为一个过滤器,并且可以过滤掉选择器值为True的data中的元素。让我们来理解以下示例。
示例
输出:
- dropwhile(predicate, iterable)
dropwhile()方法在predicate为True时从可迭代对象中删除元素。如果predicate为False,则开始返回每个元素。下面我们来看一个示例。
示例
输出:
还有很多其他方法,但我们已经讨论了一些基本的方法。
结论
我们已经讨论了Python中的扩展迭代器版本。我们提到了组合迭代器和无限迭代器,这些迭代器在数学运算中非常有帮助。