2022年 11月 9日

python中的排列组合

第一种
itertools.permutations() ,它接受一个集合并产生一个元组序列,每个元组由集合中所有元素的一个可能排列组成。也就是说通过打乱集合中元素排列顺序生成一个元组

items = ['a', 'b', 'c']
from itertools import permutations

for p in permutations(items):
    print(p)

# 指定序列的长度
# for p in permutations(items, 2):
#     print(p)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

结果:

('a', 'b', 'c')
('a', 'c', 'b')
('b', 'a', 'c')
('b', 'c', 'a')
('c', 'a', 'b')
('c', 'b', 'a')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

第二种
使用 itertools.combinations() 可得到输入集合中元素的所有的组合。

from itertools import combinations

items = ['a', 'b', 'c']
for c in combinations(items,2):
    print(c)

#for c in combinations(items, 3):
#    print(c)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

结果

('a', 'b')
('a', 'c')
('b', 'c')
  • 1
  • 2
  • 3

第三种
函 数 itertools.combinations_with_replacement() 允许同一个元素被选择多次

items = ['a', 'b', 'c']
from itertools import combinations_with_replacement


for a in combinations_with_replacement(items, 3):
    print(a)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

结果:

('a', 'a', 'a')
('a', 'a', 'b')
('a', 'a', 'c')
('a', 'b', 'b')
('a', 'b', 'c')
('a', 'c', 'c')
('b', 'b', 'b')
('b', 'b', 'c')
('b', 'c', 'c')
('c', 'c', 'c')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10