itertools 模块使用详解(1)

文章目录

  • 主要使用场景
  • 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')
# 本身最多3个元素, 但是可以组合出5种元素.
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')

你可能感兴趣的:(python进阶)