Python 中的 Itertools

Python 中的 Itertools

科技

在这篇博客中,我们将详细学习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. 计数(开始,步骤): 这个函数帮助我们以算术级数的形式打印值。就像我们不断地添加一个数字一样。该函数将无限循环,如果没有给出步长,则默认为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 时,它将停止打印。

  1. 循环(可迭代): 这个迭代器帮助我们以循环的形式打印值。一旦完成其循环,就会重新开始。

例子:

import itertools

count = 0
for i in itertools.cycle('ABC'):
    if count > 9:
        break
    else:
        print(i, end=" ")
        count += 1

输出:

ABCABCABCA

  1. 重复(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 和行业就绪的数据科学技术来增强您的职业生涯!

测验图标测验图标





让我们借助代码来学习所有这些方法:

  1. 产品(): 此函数用于查找两个列表或数组的笛卡尔积。

代码:

from itertools import product
print(list(product('ABC', [2, 5])))

输出:

[(‘A’, 2), (‘A’, 5), (‘B’, 2), (‘B’, 5), (‘C’, 2), (‘C’, 5)]

  1. 排列(): 该函数用于查找列表或数组的排列。

代码:

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)]

  1. 组合():该函数用于按排序顺序查找列表或数组的所有可能组合,无需替换。

代码:

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)]

  1. 组合与替换(): 这个功能包括元素的替换,然后找到元素可能的组合。

代码:

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)]

终止迭代器

以下是该模块中以下类型的终止迭代器。

  1. 累积(迭代器,函数): 该函数用于将数字一一相加,也可以进行乘法、减法等操作,默认情况下它对元素进行求和。

代码:

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]

  1. 链(迭代器):这个函数帮助我们将多个列表连接成一个列表。

代码:

from itertools import chain
result = list(chain([1, 2], ['A', 'B'], [3, 4]))
print(result) 

输出:

[1, 2, ‘A’, ‘B’, 3, 4]

  1. 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]

  1. 压缩(数据,选择器): 它帮助我们根据一些给定的选择器过滤数据,选择器是布尔值列表。

代码:

from itertools import compress
result = list(compress('ABCDE', [1, 0, 1, 0, 1]))
print(result) 

输出:

[‘A’, ‘C’, ‘E’]

  1. 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’)]

  1. dropwhile(函数,可迭代): 当函数返回 false 时,该函数开始打印该值。

代码:

from itertools import dropwhile

result = list(dropwhile(lambda x: x < 3, [1, 2, 3, 4, 5]))
print(result) 

输出:

[3, 4, 5]

  1. 三通(可迭代,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]

  1. takewhile(函数,可迭代): 该函数与 dropwhile 函数相反,每当函数返回 true 时,它​​就开始打印值,当返回 false 值时,它停止打印值。

代码:

from itertools import takewhile

result = list(takewhile(lambda x: x < 3, [1, 2, 3, 4, 5]))
print(result)  

输出:
[1, 2]

  1. 星图(函数,元组列表): 该函数根据元组参数中给出的函数执行一些操作。

代码:

from itertools import starmap

result = list(starmap(pow, [(2, 3), (3, 2)]))
print(result) 

输出:
[8, 9]

  1. 成对(可迭代): 该函数以对的形式转换给定的输入。

代码:

from itertools import pairwise

result = list(pairwise('ABCDE'))
print(result) 

输出:
[(‘A’, ‘B’), (‘B’, ‘C’), (‘C’, ‘D’), (‘D’, ‘E’)]

  1. islice(可迭代、开始、停止[, step]): 该迭代器开始在参数中提到的指定范围内迭代循环。

代码:

from itertools import islice

result = list(islice([10, 20, 30, 40, 50], 1, 4))
print(result)  

输出:
[20, 30, 40]

  1. 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’])]

  1. 过滤器假(函数,可迭代): 它根据某些条件从元组或列表中过滤元素,如果条件为假,则采用该元素,否则不采用。

代码:

from itertools import filterfalse

result = list(filterfalse(lambda x: x % 2 == 0, [1, 2, 3, 4, 5]))
print(result)  

输出:
[1, 3, 5]

  1. 批处理(可迭代,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课程。