使用 python 中的 itertools 模块来寻找排列组合的实例教程

311 阅读3分钟

一组元素的排列和组合是对这组元素的不同安排。

  • 组合是一个元素的集合,顺序并不重要。
  • 排列是一个集合的排列,其中的顺序很重要。

让我们考虑一个集合为 。

上述集合的排列方式如下。

('A', 'B', 'C')
('A', 'C', 'B')
('B', 'A', 'C')
('B', 'C', 'A')
('C', 'A', 'B')
('C', 'B', 'A')

当两个元素同时出现时,上述集合的组合是 。

('A', 'B')
('A', 'C')
('B', 'C')

在本教程中,我们将学习如何用Python获得一组元素的排列和组合。我们将研究字符和数字的集合。

我们将使用 Python 的itertools模块下的 combinations() 和permutations()方法。

让我们开始吧。

数字数据的排列组合

要使用 itertools 模块下的permutations() 方法,我们首先需要导入该模块。

现在让我们定义一个数字集。

现在让我们使用permutations()方法来获得排列组合的列表。

perm_set = itertools.permutations(val)

上面的这行代码给出了一个itertools对象。为了打印不同的排列组合,我们将对这个对象进行迭代。

for i in perm_set:
    print(i)

我们得到的输出是:

1 2 3 4
1 2 4 3
1 3 2 4
1 3 4 2
1 4 2 3
1 4 3 2
2 1 3 4
2 1 4 3
2 3 1 4
2 3 4 1
2 4 1 3
2 4 3 1
3 1 2 4
3 1 4 2
3 2 1 4
3 2 4 1
3 4 1 2
3 4 2 1
4 1 2 3
4 1 3 2
4 2 1 3
4 2 3 1
4 3 1 2
4 3 2 1

本节的完整代码如下。

import itertools
 
val = [1, 2, 3, 4]
 
perm_set = itertools.permutations(val)
 
for i in perm_set:
    print(i)

一个字符串的排列组合

接下来我们将学习如何获得一个字符串中字符的排列组合。

我们将使用 permutations() 方法,但这次我们将传递一个字符串作为参数。

import itertools
 
s = "ABC"

perm_set = itertools.permutations(s)
for val in perm_set:
    print(val)

输出:

('A', 'B', 'C')
('A', 'C', 'B')
('B', 'A', 'C')
('B', 'C', 'A')
('C', 'A', 'B')
('C', 'B', 'A')

固定长度的排列组合

我们可以找到一个集合的排列组合,在每个排列组合中只取指定数量的元素。这类似于数学领域的 nPr

下面给出了寻找固定长度的排列组合的代码。

import itertools
 
val = [1, 2, 3, 4]
 
perm_set = itertools.permutations(val,2)
 
for i in perm_set:
    print(i)

输出 :

(1, 2)
(1, 3)
(1, 4)
(2, 1)
(2, 3)
(2, 4)
(3, 1)
(3, 2)
(3, 4)
(4, 1)
(4, 2)
(4, 3)

数值数据的组合

就像permutations()方法一样,我们也可以使用itertools下的combinations()来获得一个集合的组合。

在调用combinations()时,我们需要传递两个参数,一个是用于寻找组合的集合,一个是表示每个组合长度的数字。

import itertools
 
val = [1, 2, 3, 4]
 
com_set = itertools.combinations(val, 2)
 
for i in com_set:
    print(i)

输出。

(1, 2)
(1, 3)
(1, 4)
(2, 3)
(2, 4)
(3, 4)

一个字符串的组合

我们还可以得到一个字符串的组合。要获得一个字符串的组合,请使用下面的代码。

import itertools
 
s = "ABC"
 
com_set = itertools.combinations(s, 2)
 
for i in com_set:
    print(i)

输出。

('A', 'B')
('A', 'C')
('B', 'C')

带替换的组合

在itertools模块中还有一个方法,叫做combinations_with_replacement()。这个方法也考虑到了一个数字与自身的组合。

让我们来看看它是如何工作的。

对于数字集

import itertools
 
val = [1, 2, 3, 4]
 
com_set = itertools.combinations_with_replacement(val, 2)
 
for i in com_set:
    print(i)

输出:

(1, 1)
(1, 2)
(1, 3)
(1, 4)
(2, 2)
(2, 3)
(2, 4)
(3, 3)
(3, 4)
(4, 4)

你可以看到上面的输出和普通组合操作的输出的区别。这里我们有像(1,1)和(2,2)这样的组合,这在普通组合操作中是不存在的。

对于一个字符串

import itertools
 
val = "ABCD"
 
com_set = itertools.combinations_with_replacement(val, 2)
 
for i in com_set:
    print(i)

输出。

('A', 'A')
('A', 'B')
('A', 'C')
('A', 'D')
('B', 'B')
('B', 'C')
('B', 'D')
('C', 'C')
('C', 'D')
('D', 'D')

结论

本教程是关于在python中寻找一个集合的排列和组合。我们使用 python 中的 itertools 模块来寻找排列组合。