Python_itertools

发布于:2024-10-11 ⋅ 阅读:(41) ⋅ 点赞:(0)

itertools

  1. itertools.count(start, step)
    返回一个无限迭代器,从指定的start开始,每次增加step。
import itertools
# 从1开始,每次增加1,输出前5个数
for i in itertools.count(1, 1):
    if i > 5:
        break
    print(i)

运行结果:
1
2
3
4
5

  1. itertools.cycle(iterable)
    循环遍历一个可迭代对象。
import itertools
# 循环打印序列中的元素,直到打印5次
for c in itertools.cycle('ABCD'):
    if c == 'D':  # 当打印到D时,实际上是第二个D,循环了一次
        break
    print(c)

运行结果:
A
B
C
D
A

  1. itertools.repeat(object, times=None)
    无限重复一个对象,除非指定了次数。
import itertools
# 重复打印"Hello" 5次
for _ in itertools.repeat(None, 5):
    print("Hello")

运行结果:
Hello
Hello
Hello
Hello
Hello

  1. *itertools.chain(iterables)
    将多个迭代器串联起来。
import itertools
# 串联两个序列
for c in itertools.chain('ABC', 'DEF'):
    print(c)

运行结果:
A
B
C
D
E
F

  1. *itertools.product(iterables, repeat=1)
    计算输入的多个可迭代对象的笛卡尔积。
import itertools
# 计算两个序列的笛卡尔积
for p in itertools.product('AB', repeat=2):
    print(p)

运行结果:
(‘A’, ‘A’)
(‘A’, ‘B’)
(‘B’, ‘A’)
(‘B’, ‘B’)

  1. itertools.permutations(iterable, r=None)
    返回所有可能的排列。
import itertools
# 返回序列的所有可能的2个元素的排列
for p in itertools.permutations('ABCD', 2):
    print(p)

运行结果:
(‘A’, ‘B’)
(‘A’, ‘C’)
(‘A’, ‘D’)
(‘B’, ‘A’)
(‘B’, ‘C’)
(‘B’, ‘D’)
(‘C’, ‘A’)
(‘C’, ‘B’)
(‘C’, ‘D’)
(‘D’, ‘A’)
(‘D’, ‘B’)
(‘D’, ‘C’)

  1. itertools.combinations(iterable, r)
    返回所有可能的组合。
import itertools
# 返回序列的所有可能的2个元素的组合
for c in itertools.combinations('ABCD', 2):
    print(c)

运行结果:
(‘A’, ‘B’)
(‘A’, ‘C’)
(‘A’, ‘D’)
(‘B’, ‘C’)
(‘B’, ‘D’)
(‘C’, ‘D’)

  1. itertools.combinations_with_replacement(iterable, r)
    返回所有可能的组合,允许重复元素。
import itertools
# 返回序列的所有可能的2个元素的组合,允许元素重复
for c in itertools.combinations_with_replacement('ABCD', 2):
    print(c)

运行结果:
(‘A’, ‘A’)
(‘A’, ‘B’)
(‘A’, ‘C’)
(‘A’, ‘D’)
(‘B’, ‘B’)
(‘B’, ‘C’)
(‘B’, ‘D’)
(‘C’, ‘C’)
(‘C’, ‘D’)
(‘D’, ‘D’)

这些是 itertools 中一些常见函数的示例和运行结果。由于 itertools 提供的是迭代器,所以这些函数在处理大数据集时非常高效,因为它们不需要一次性将所有数据加载到内存中。

itertools combinations

在Python中,itertools 模块提供了一个名为 combinations 的函数,它可以用来生成指定长度的组合。组合是从一个大集合中选择若干个元素组成子集,且子集中的元素不考虑顺序。
以下是如何使用 itertools.combinations 的一个基本示例:
首先,你需要导入 itertools 模块:
import itertools

然后,你可以使用 combinations 函数来生成组合:

# 定义一个集合
my_set = [1, 2, 3, 4]

# 生成长度为 2 的所有组合
for combo in itertools.combinations(my_set, 2):
    print(combo)

这段代码会输出:
(1, 2)
(1, 3)
(1, 4)
(2, 3)
(2, 4)
(3, 4)

itertools.combinations 函数的第一个参数是一个可迭代对象,第二个参数是要生成的组合的长度。函数会返回一个迭代器,每次迭代返回一个元组,包含一个组合。

如果你想要生成所有可能的组合,可以使用 combinations 函数的第二个参数来指定不同的长度:

# 生成所有可能长度的组合
for r in range(len(my_set)+1):
    for combo in itertools.combinations(my_set, r):
        print(combo)

这段代码会输出从长度为1到集合长度的所有组合。
请注意,组合的数量会随着组合长度的增加而急剧增加,所以如果你的集合很大,生成很长的组合可能会消耗大量的计算资源。