文章目录
- 主要使用场景
- 1. `permutations()`是排列函数
- 2. `combinations()`是组合函数
- 3. `combinations_with_replacement() `也是组合函数
主要使用场景
1. permutations()
是排列函数
- 所有元素重排列为所有可能的情况(将元素之间的顺序打乱成所有可能的情况)
- 以元组序列的形式返回
示例如下:
Python 3.7.3 (default, Mar 28 2019, 10:38:38) [MSC v.1915 32 bit (Intel)]
Type 'copyright', 'credits' or 'license' for more information
IPython 7.4.0 -- An enhanced Interactive Python. Type '?' for help.
In [1]: items = ['a', 'b', 'c']
In [2]: from itertools import permutations
In [3]: for p in permutations(items):
...: print(p)
...:
('a', 'b', 'c')
('a', 'c', 'b')
('b', 'a', 'c')
('b', 'c', 'a')
('c', 'a', 'b')
('c', 'b', 'a')
In [4]: for p in permutations(items, 2):
...: print(p)
...:
('a', 'b')
('a', 'c')
('b', 'a')
('b', 'c')
('c', 'a')
('c', 'b')
In [5]:
2. combinations()
是组合函数
- 所有元素的全部组合形式
- 对
combinations
来说, 元素之间的实际顺序是不予考虑的.也就是说组合('a', 'b')
和组合('b', 'a')
被认为是相同的组合形式.
示例:
In [5]: from itertools import combinations
In [6]: for c in combinations(items, 3):
...: print(c)
...:
('a', 'b', 'c')
In [7]: for c in combinations(items, 2):
...: print(c)
...:
('a', 'b')
('a', 'c')
('b', 'c')
In [8]: for c in combinations(items, 1):
...: print(c)
...:
('a',)
('b',)
('c',)
In [9]:
3. combinations_with_replacement()
也是组合函数
- 解除了
combinations()
中的限制, 允许相同的元素得到多次选择.允许超出元素个数限制
示例如下:
In [9]: from itertools import combinations_with_replacement
In [10]: for d in combinations_with_replacement(items,3):
...: print(d)
...:
('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')
In [21]: for d in combinations_with_replacement(items,5):
...: print(d)
...:
('a', 'a', 'a', 'a', 'a')
('a', 'a', 'a', 'a', 'b')
('a', 'a', 'a', 'a', 'c')
('a', 'a', 'a', 'b', 'b')
('a', 'a', 'a', 'b', 'c')
('a', 'a', 'a', 'c', 'c')
('a', 'a', 'b', 'b', 'b')
('a', 'a', 'b', 'b', 'c')
('a', 'a', 'b', 'c', 'c')
('a', 'a', 'c', 'c', 'c')
('a', 'b', 'b', 'b', 'b')
('a', 'b', 'b', 'b', 'c')
('a', 'b', 'b', 'c', 'c')
('a', 'b', 'c', 'c', 'c')
('a', 'c', 'c', 'c', 'c')
('b', 'b', 'b', 'b', 'b')
('b', 'b', 'b', 'b', 'c')
('b', 'b', 'b', 'c', 'c')
('b', 'b', 'c', 'c', 'c')
('b', 'c', 'c', 'c', 'c')
('c', 'c', 'c', 'c', 'c')