Python中的排列组合
时间:2020-02-23 14:42:23 来源:igfitidea点击:
一组元素的排列和组合是该组元素的不同排列。
- 组合是顺序无关紧要的元素的集合
- 排列是顺序重要的一组排列。
让我们考虑一个集合为:
{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()一样,我们也可以在itertools下使用groups()来获取集合的组合。
在调用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模块下还有另一种方法,称为groups_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')