排列组合itertools模块下主要包含如下4类:
-
笛卡尔积:itertools.product(*iterables[, repeat])
-
排列:itertools.permutations(iterable[, r])
-
组合:itertools.combinations(iterable, r)
-
组合(包含自身重复):itertools.combinations_with_replacement(iterable, r)
代码示例
1.笛卡尔积 itertools.product(*iterables[, repeat])
若是单一列表笛卡尔乘积,则包含本身。例子中的 甲甲, 乙乙,丙丙
# 字符串进行笛卡尔积
for i in itertools.product('甲乙丙', repeat=2):
print(i)
>>
('甲', '甲')
('甲', '乙')
('甲', '丙')
('乙', '甲')
('乙', '乙')
('乙', '丙')
('丙', '甲')
('丙', '乙')
('丙', '丙')
# 两个元组进行笛卡尔积
a = (1, 2)
b = ('甲', '乙', '丙')
c = itertools.product(a, b)
print(c) # 打印的是一个可迭代的对象 <itertools.product object at 0x000002720C3DDA40>
for i in c:
print(i)
>> <itertools.product object at 0x00000219CD05F140>
>>
(1, '甲')
(1, '乙')
(1, '丙')
(2, '甲')
(2, '乙')
(2, '丙')
2. 排列:itertools.permutations(iterable[, r])
for i in itertools.permutations('甲乙丙', 2):
print(''.join(i), end=' ')
>> 甲乙 甲丙 乙甲 乙丙 丙甲 丙乙
for i in itertools.permutations('甲乙丙', 3):
print(''.join(i), end=' ')
>> 甲乙丙 甲丙乙 乙甲丙 乙丙甲 丙甲乙 丙乙甲
3. 组合:itertools.combinations(iterable, r)
for i in itertools.combinations('甲乙丙', 1):
print(''.join(i), end=' ')
>> 甲 乙 丙
for i in itertools.combinations('甲乙丙', 2):
print(''.join(i), end=' ')
>> 甲乙 甲丙 乙丙
for i in itertools.combinations('甲乙丙', 3):
print(''.join(i), end=' ')
>> 甲乙丙
4. 组合(包含自身重复):itertools.combinations_with_replacement(iterable, r)
for i in itertools.combinations_with_replacement('甲乙丙', 2):
print(''.join(i), end=' ')
>> 甲甲 甲乙 甲丙 乙乙 乙丙 丙丙