认识排列与组合
排列组合是组合学最基本的概念。所谓排列(Permutation),就是指从给定个数的元素中取出指定个数的元素进行排序。组合(Combination)则是指从给定个数的元素中仅仅取出指定个数的元素,不考虑排序。
比如我们要实现1,2,3的排列组合,我们可以很容易写出来,如下表:
任意选取的方式 | 待取的元素 | 任意选取1个元素 | 任意选取2个元素 | 任意选取3个元素 |
---|---|---|---|---|
考虑顺序(排列) | 123 | 1,2,3 | 12,21,13,31,23,32 | 123,132,213,231,312,321 |
不考虑顺序(组合) | 123 | 1,2,3 | 12,13,23 | 123 |
用代码实现考虑顺序的排列
- 从
1,2,3
这3个元素中任意选取1个元素,且不考虑顺序
结果为:import itertools print(list(itertools.permutations([1, 2, 3], 1)))
[(1,), (2,), (3,)]
- 从
1,2,3
这3个元素中任意选取2个元素,且不考虑顺序
结果为:import itertools print(list(itertools.permutations([1, 2, 3], 2)))
[(1, 2), (1, 3), (2, 1), (2, 3), (3, 1), (3, 2)]
- 从
1,2,3
这3个元素中任意选取3个元素,且不考虑顺序
结果为:import itertools print(list(itertools.permutations([1, 2, 3], 3)))
[(1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1)]
用代码实现不考虑顺序的组合
- 从
1,2,3
这3个元素中任意选取1个元素,且不考虑顺序
结果为:import itertools print(list(itertools.combinations([1, 2, 3], 1)))
[(1,), (2,), (3,)]
- 从
1,2,3
这3个元素中任意选取2个元素,且不考虑顺序
结果为:import itertools print(list(itertools.combinations([1, 2, 3], 2)))
[(1, 2), (1, 3), (2, 3)]
- 从
1,2,3
这3个元素中任意选取3个元素,且不考虑顺序
结果为:import itertools print(list(itertools.combinations([1, 2, 3], 3)))
[(1, 2, 3)]