Python_itertools
itertools
- 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
- 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
- itertools.repeat(object, times=None)
无限重复一个对象,除非指定了次数。
import itertools
# 重复打印"Hello" 5次
for _ in itertools.repeat(None, 5):
print("Hello")
运行结果:
Hello
Hello
Hello
Hello
Hello
- *itertools.chain(iterables)
将多个迭代器串联起来。
import itertools
# 串联两个序列
for c in itertools.chain('ABC', 'DEF'):
print(c)
运行结果:
A
B
C
D
E
F
- *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’)
- 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’)
- 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’)
- 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到集合长度的所有组合。
请注意,组合的数量会随着组合长度的增加而急剧增加,所以如果你的集合很大,生成很长的组合可能会消耗大量的计算资源。