在这篇博客中,我们将详细学习Python itertools。 Python Itertools 用于使用迭代器。它在 Python 程序中使用,因为它易于编写、速度快且内存效率高。
什么是 Python 迭代工具?
Python itertools 是 Python 标准库中的一个模块,为我们提供了很多使用迭代器的函数。它帮助我们根据项目需求操作迭代器。我们可以创建自定义迭代器来执行一些特定任务。
让我们通过一个例子来详细了解这个概念:
例子:如果我们必须执行两个列表的笛卡尔积,首先让我们使用普通函数来执行此操作
代码:
def cartesian_product(list1, list2): for item1 in list1: for item2 in list2: yield (item1, item2) list1 = [1,2,3] list2 = ['a', 'b', 'c'] result = list(cartesian_product(list1, list2)) print("Cartesian product :", result)
输出:
笛卡尔积: [(1, ‘a’), (1, ‘b’), (1, ‘c’), (2, ‘a’), (2, ‘b’), (2, ‘c’), (3, ‘a’), (3, ‘b’), (3, ‘c’)]
现在让我们使用迭代器来完成此操作:
import time from itertools import product list1 = [1,2,3] list2 = ['a','b','c'] result = list(product(list1, list2)) print("Cartesian product using itertools:", result)
输出:
使用 itertools 的笛卡尔积: [(1, ‘a’), (1, ‘b’), (1, ‘c’), (2, ‘a’), (2, ‘b’), (2, ‘c’), (3, ‘a’), (3, ‘b’), (3, ‘c’)]
现在,我们可以在 iterools 的帮助下看到这一点,代码变得太容易编写和理解了。同样对于复杂的计算,itertools 可以帮助我们比普通函数或迭代器更快地进行计算。
使用 Python 进行数据科学:释放数据的力量!
掌握 Python、分析数据并构建预测模型以取得现实世界的成功!
Python 中迭代器的类型
以下是Python中该模块提供的以下三种类型的迭代器:
无限迭代器
Python 中的迭代器与 for循环 迭代数组、列表、元组、字典等。有时循环也可以无限运行,则称为无限迭代器。 Python 提供了 3 种类型的无限迭代器:
方法 | 描述 | 输出 |
计数(开始,步数) | 它以起始值开始,并以起始+步长值开始 | 例如:计数(5,3) 输出:5,8,11 |
循环(可迭代) | 它以循环的形式迭代该值 | 例如:循环(‘ABC’) 输出:ABCABCABC…。 |
重复(val,n) | 它重复该值 n 次 | 例如:重复(2,4)
输出:2 2 2 2。 |
让我们借助代码来学习所有这些功能:
- 计数(开始,步骤): 这个函数帮助我们以算术级数的形式打印值。就像我们不断地添加一个数字一样。该函数将无限循环,如果没有给出步长,则默认为1。
代码:
import itertools for i in itertools.count(2,5): if i == 42: break else: print(i, end=" ")
输出:
2 7 12 17 22 27 32 37
解释: 上面的代码将从 2 开始打印值,并继续打印下一个第五个元素,每当循环达到 42 时,它将停止打印。
- 循环(可迭代): 这个迭代器帮助我们以循环的形式打印值。一旦完成其循环,就会重新开始。
例子:
import itertools count = 0 for i in itertools.cycle('ABC'): if count > 9: break else: print(i, end=" ") count += 1
输出:
ABCABCABCA
- 重复(val,n): 该函数无限地打印 val。如果给出 n 的值,则仅打印 n 次。
代码:
import itertools print(list(itertools.repeat("Intellipaat", 4)))
输出:
[‘Intellipaat’, ‘Intellipaat’, ‘Intellipaat’, ‘Intellipaat’]
组合迭代器
Python 中有四种组合迭代器:
方法 | 描述 | 例子 |
产品() | 这个函数帮助我们求列表的笛卡尔积 | 产品(列表1,列表2) |
排列() | 它用于查找列表的排列 | 排列(列表1) |
组合() | 它帮助我们打印所有可能的组合(无需替换)。 | 组合(‘ABC’, 2) |
组合与替换() | 它帮助我们打印替换组合 | 与替换的组合(“AB”,2) |
Python 驱动的数据科学!
学习 Python 和行业就绪的数据科学技术来增强您的职业生涯!
让我们借助代码来学习所有这些方法:
- 产品(): 此函数用于查找两个列表或数组的笛卡尔积。
代码:
from itertools import product print(list(product('ABC', [2, 5])))
输出:
[(‘A’, 2), (‘A’, 5), (‘B’, 2), (‘B’, 5), (‘C’, 2), (‘C’, 5)]
- 排列(): 该函数用于查找列表或数组的排列。
代码:
from itertools import permutations print(list(permutations('XYZ'))) print() print(list(permutations(range(3),3)))
输出:
[(‘X’, ‘Y’, ‘Z’), (‘X’, ‘Z’, ‘Y’), (‘Y’, ‘X’, ‘Z’), (‘Y’, ‘Z’, ‘X’), (‘Z’, ‘X’, ‘Y’), (‘Z’, ‘Y’, ‘X’)]
[(0, 1, 2), (0, 2, 1), (1, 0, 2), (1, 2, 0), (2, 0, 1), (2, 1, 0)]
- 组合():该函数用于按排序顺序查找列表或数组的所有可能组合,无需替换。
代码:
from itertools import combinations items = ['A', 2, 'B', 3] result = list(combinations(items, 2)) print("Pairwise combinations:", result)
输出:
成对组合: [(‘A’, 2), (‘A’, ‘B’), (‘A’, 3), (2, ‘B’), (2, 3), (‘B’, 3)]
- 组合与替换(): 这个功能包括元素的替换,然后找到元素可能的组合。
代码:
from itertools import combinations_with_replacement items = ['A', 2, 'B', 3] result = list(combinations_with_replacement(items, 2)) print("Pairwise combinations:", result)
输出:
成对组合: [(‘A’, ‘A’), (‘A’, 2), (‘A’, ‘B’), (‘A’, 3), (2, 2), (2, ‘B’), (2, 3), (‘B’, ‘B’), (‘B’, 3), (3, 3)]
终止迭代器
以下是该模块中以下类型的终止迭代器。
- 累积(迭代器,函数): 该函数用于将数字一一相加,也可以进行乘法、减法等操作,默认情况下它对元素进行求和。
代码:
from itertools import accumulate result = list(accumulate([1, 2, 3, 4])) print(result) result = list(accumulate([1, 2, 3, 4], func=lambda x, y: x * y)) print(result)
输出:
[1, 3, 6, 10]
[1, 2, 6, 24]
- 链(迭代器):这个函数帮助我们将多个列表连接成一个列表。
代码:
from itertools import chain result = list(chain([1, 2], ['A', 'B'], [3, 4])) print(result)
输出:
[1, 2, ‘A’, ‘B’, 3, 4]
- chain.from_iterable(iter): 这个函数帮助我们迭代单个列表,它可以是列表的列表或任何其他可迭代的列表
代码:
from itertools import chain result = list(chain.from_iterable([[1, 2], [3, 4], [5, 6]])) print(result)
输出:
[1, 2, 3, 4, 5, 6]
- 压缩(数据,选择器): 它帮助我们根据一些给定的选择器过滤数据,选择器是布尔值列表。
代码:
from itertools import compress result = list(compress('ABCDE', [1, 0, 1, 0, 1])) print(result)
输出:
[‘A’, ‘C’, ‘E’]
- zip_longest(*iterables, fillvalue=None): 这个函数帮助我们交替打印列表,如果一个列表完成,它将从 fillvalue 中获取值。
代码:
from itertools import zip_longest result = list(zip_longest('AB', '1234', fillvalue='X')) print(result)
输出:
[(‘A’, ‘1’), (‘B’, ‘2’), (‘X’, ‘3’), (‘X’, ‘4’)]
- dropwhile(函数,可迭代): 当函数返回 false 时,该函数开始打印该值。
代码:
from itertools import dropwhile result = list(dropwhile(lambda x: x < 3, [1, 2, 3, 4, 5])) print(result)
输出:
[3, 4, 5]
- 三通(可迭代,n): 该函数将列表拆分为 n 次迭代器。
代码:
from itertools import tee a, b = tee([1, 2, 3], 2) print(list(a)) print(list(b))
输出:
[1, 2, 3]
[1, 2, 3]
- takewhile(函数,可迭代): 该函数与 dropwhile 函数相反,每当函数返回 true 时,它就开始打印值,当返回 false 值时,它停止打印值。
代码:
from itertools import takewhile result = list(takewhile(lambda x: x < 3, [1, 2, 3, 4, 5])) print(result)
输出:
[1, 2]
- 星图(函数,元组列表): 该函数根据元组参数中给出的函数执行一些操作。
代码:
from itertools import starmap result = list(starmap(pow, [(2, 3), (3, 2)])) print(result)
输出:
[8, 9]
- 成对(可迭代): 该函数以对的形式转换给定的输入。
代码:
from itertools import pairwise result = list(pairwise('ABCDE')) print(result)
输出:
[(‘A’, ‘B’), (‘B’, ‘C’), (‘C’, ‘D’), (‘D’, ‘E’)]
- islice(可迭代、开始、停止[, step]): 该迭代器开始在参数中提到的指定范围内迭代循环。
代码:
from itertools import islice result = list(islice([10, 20, 30, 40, 50], 1, 4)) print(result)
输出:
[20, 30, 40]
- groupby(可迭代,键=无): 这个函数帮助我们将相似的元素分组在一起
代码:
from itertools import groupby result = [(key, list(group)) for key, group in groupby('aaabbcc')] print(result)
输出:
[(‘a’, [‘a’, ‘a’, ‘a’]), (‘b’, [‘b’, ‘b’]), (‘c’, [‘c’, ‘c’])]
- 过滤器假(函数,可迭代): 它根据某些条件从元组或列表中过滤元素,如果条件为假,则采用该元素,否则不采用。
代码:
from itertools import filterfalse result = list(filterfalse(lambda x: x % 2 == 0, [1, 2, 3, 4, 5])) print(result)
输出:
[1, 3, 5]
- 批处理(可迭代,n): 这个函数帮助我们将元素分成大小为 n 的批次,其中每个批次都作为元组返回。
代码:
from itertools import batched result = list(batched(range(10), 3)) print(result)
输出:
[(0, 1, 2), (3, 4, 5), (6, 7, 8), (9,)]
获得 100% 的徒步旅行!
立即掌握最需要的技能!
结论
到目前为止,在本文中,我们已经详细学习了 Python itertools 及其方法。我们还学习了不同类型的 Python itertools:无限、组合器和终止迭代器。我们已经详细介绍了这些迭代器的所有方法。如果您想了解更多关于Python的知识,您可以参考我们的Python课程。