用Python进行排列组合
一个元素集合的排列和组合是集合元素的不同排列方式。
- Combination is a collection of the elements where the order doesn’t matter
- Permutation is an arrangement of a set where the order does matter.
我们将一个集合定义为:
{A, B, C}
以上集合的排列如下:
('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()方法,我们首先需要导入该模块。
import itertools
现在让我们定义一个数集。
val = [1, 2, 3, 4]
现在我们使用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()一样,我们可以使用combinations(),同样在itertools中获取一组的组合。
在调用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模块来找到这些排列和组合。