迭代所有的组合或排列

  • 1.思考:有的时候,我们希望对一系列元素所有可能的组合或者排列进行迭代。

  • 2.解决方法:使用itertools模块中提供的函数

    • itertools.permutations() :以一个元素集合作为此方法的参数,将某个元素集合中的所有元素重排列为所有可能的元祖序列,并返回。打乱元素顺序
    >>> items = ['a','b','c','d','e']
    >>> from itertools import permutations
    >>> for per in permutations(items):
            print(per)
    
        
    ('a', 'b', 'c', 'd', 'e')
    ('a', 'b', 'c', 'e', 'd')
    ('a', 'b', 'd', 'c', 'e')
    ('a', 'b', 'd', 'e', 'c')
    ('a', 'b', 'e', 'c', 'd')
    ('a', 'b', 'e', 'd', 'c')
    ('a', 'c', 'b', 'd', 'e')
    ('a', 'c', 'b', 'e', 'd')
    ('a', 'c', 'd', 'b', 'e')
    ('a', 'c', 'd', 'e', 'b')
    ('a', 'c', 'e', 'b', 'd')
    ('a', 'c', 'e', 'd', 'b')
    ('a', 'd', 'b', 'c', 'e')
    ('a', 'd', 'b', 'e', 'c')
    ('a', 'd', 'c', 'b', 'e')
    ('a', 'd', 'c', 'e', 'b')
    ('a', 'd', 'e', 'b', 'c')
    ('a', 'd', 'e', 'c', 'b')
    ('a', 'e', 'b', 'c', 'd')
    ('a', 'e', 'b', 'd', 'c')
    ('a', 'e', 'c', 'b', 'd')
    ('a', 'e', 'c', 'd', 'b')
    ('a', 'e', 'd', 'b', 'c')
    ('a', 'e', 'd', 'c', 'b')
    ('b', 'a', 'c', 'd', 'e')
    ('b', 'a', 'c', 'e', 'd')
    ('b', 'a', 'd', 'c', 'e')
    ('b', 'a', 'd', 'e', 'c')
    ('b', 'a', 'e', 'c', 'd')
    ('b', 'a', 'e', 'd', 'c')
    ('b', 'c', 'a', 'd', 'e')
    ('b', 'c', 'a', 'e', 'd')
    ('b', 'c', 'd', 'a', 'e')
    ('b', 'c', 'd', 'e', 'a')
    ('b', 'c', 'e', 'a', 'd')
    ('b', 'c', 'e', 'd', 'a')
    ('b', 'd', 'a', 'c', 'e')
    ('b', 'd', 'a', 'e', 'c')
    ('b', 'd', 'c', 'a', 'e')
    ('b', 'd', 'c', 'e', 'a')
    ('b', 'd', 'e', 'a', 'c')
    ('b', 'd', 'e', 'c', 'a')
    ('b', 'e', 'a', 'c', 'd')
    ('b', 'e', 'a', 'd', 'c')
    ('b', 'e', 'c', 'a', 'd')
    ('b', 'e', 'c', 'd', 'a')
    ('b', 'e', 'd', 'a', 'c')
    ('b', 'e', 'd', 'c', 'a')
    ('c', 'a', 'b', 'd', 'e')
    ('c', 'a', 'b', 'e', 'd')
    ('c', 'a', 'd', 'b', 'e')
    ('c', 'a', 'd', 'e', 'b')
    ('c', 'a', 'e', 'b', 'd')
    ('c', 'a', 'e', 'd', 'b')
    ('c', 'b', 'a', 'd', 'e')
    ('c', 'b', 'a', 'e', 'd')
    ('c', 'b', 'd', 'a', 'e')
    ('c', 'b', 'd', 'e', 'a')
    ('c', 'b', 'e', 'a', 'd')
    ('c', 'b', 'e', 'd', 'a')
    ('c', 'd', 'a', 'b', 'e')
    ('c', 'd', 'a', 'e', 'b')
    ('c', 'd', 'b', 'a', 'e')
    ('c', 'd', 'b', 'e', 'a')
    ('c', 'd', 'e', 'a', 'b')
    ('c', 'd', 'e', 'b', 'a')
    ('c', 'e', 'a', 'b', 'd')
    ('c', 'e', 'a', 'd', 'b')
    ('c', 'e', 'b', 'a', 'd')
    ('c', 'e', 'b', 'd', 'a')
    ('c', 'e', 'd', 'a', 'b')
    ('c', 'e', 'd', 'b', 'a')
    ('d', 'a', 'b', 'c', 'e')
    ('d', 'a', 'b', 'e', 'c')
    ('d', 'a', 'c', 'b', 'e')
    ('d', 'a', 'c', 'e', 'b')
    ('d', 'a', 'e', 'b', 'c')
    ('d', 'a', 'e', 'c', 'b')
    ('d', 'b', 'a', 'c', 'e')
    ('d', 'b', 'a', 'e', 'c')
    ('d', 'b', 'c', 'a', 'e')
    ('d', 'b', 'c', 'e', 'a')
    ('d', 'b', 'e', 'a', 'c')
    ('d', 'b', 'e', 'c', 'a')
    ('d', 'c', 'a', 'b', 'e')
    ('d', 'c', 'a', 'e', 'b')
    ('d', 'c', 'b', 'a', 'e')
    ('d', 'c', 'b', 'e', 'a')
    ('d', 'c', 'e', 'a', 'b')
    ('d', 'c', 'e', 'b', 'a')
    ('d', 'e', 'a', 'b', 'c')
    ('d', 'e', 'a', 'c', 'b')
    ('d', 'e', 'b', 'a', 'c')
    ('d', 'e', 'b', 'c', 'a')
    ('d', 'e', 'c', 'a', 'b')
    ('d', 'e', 'c', 'b', 'a')
    ('e', 'a', 'b', 'c', 'd')
    ('e', 'a', 'b', 'd', 'c')
    ('e', 'a', 'c', 'b', 'd')
    ('e', 'a', 'c', 'd', 'b')
    ('e', 'a', 'd', 'b', 'c')
    ('e', 'a', 'd', 'c', 'b')
    ('e', 'b', 'a', 'c', 'd')
    ('e', 'b', 'a', 'd', 'c')
    ('e', 'b', 'c', 'a', 'd')
    ('e', 'b', 'c', 'd', 'a')
    ('e', 'b', 'd', 'a', 'c')
    ('e', 'b', 'd', 'c', 'a')
    ('e', 'c', 'a', 'b', 'd')
    ('e', 'c', 'a', 'd', 'b')
    ('e', 'c', 'b', 'a', 'd')
    ('e', 'c', 'b', 'd', 'a')
    ('e', 'c', 'd', 'a', 'b')
    ('e', 'c', 'd', 'b', 'a')
    ('e', 'd', 'a', 'b', 'c')
    ('e', 'd', 'a', 'c', 'b')
    ('e', 'd', 'b', 'a', 'c')
    ('e', 'd', 'b', 'c', 'a')
    ('e', 'd', 'c', 'a', 'b')
    ('e', 'd', 'c', 'b', 'a')
    >>> 
    ```
* 3.`使用方法2`:
 * 提供一个可选长度参数,可得到以该参数为长度的所有全排列;
 
```python
 >>> for per in permutations(items, 2):#2为参数
            print(per)

        
    ('a', 'b')
    ('a', 'c')
    ('a', 'd')
    ('a', 'e')
    ('b', 'a')
    ('b', 'c')
    ('b', 'd')
    ('b', 'e')
    ('c', 'a')
    ('c', 'b')
    ('c', 'd')
    ('c', 'e')
    ('d', 'a')
    ('d', 'b')
    ('d', 'c')
    ('d', 'e')
    ('e', 'a')
    ('e', 'b')
    ('e', 'c')
    ('e', 'd')
    ```

* 4.`itertools.combinations()`:

    * 产生输入序列中所有元素的全部组合形式

```python
    >>> from itertools import combinations
    >>> for com in combinations(items, 3):
            print(com)
    
        
    ('a', 'b', 'c')
    ('a', 'b', 'd')
    ('a', 'b', 'e')
    ('a', 'c', 'd')
    ('a', 'c', 'e')
    ('a', 'd', 'e')
    ('b', 'c', 'd')
    ('b', 'c', 'e')
    ('b', 'd', 'e')
    ('c', 'd', 'e')
    
    >>> for com in combinations(items, 2):
            print(com)

    
    ('a', 'b')
    ('a', 'c')
    ('a', 'd')
    ('a', 'e')
    ('b', 'c')
    ('b', 'd')
    ('b', 'e')
    ('c', 'd')
    ('c', 'e')
    ('d', 'e')
    
    >>> for com in combinations(items, 1):
    print(com)

    
    ('a',)
    ('b',)
    ('c',)
    ('d',)
    ('e',)
       ```
    
* 5.`注意`:
    * `combinations()`:不考虑两两元素的顺序,例如选择`('a', 'd')`和`('d', 'a')`二者中的一种组合。
 
* 6.`itertools.combinations_with_replacement()`:
    * 允许多次选择相同的元素

```python
    >>> from itertools import combinations_with_replacement
    >>> for com in combinations_with_replacement(items,2):
            print(com)
    
        
    ('a', 'a')
    ('a', 'b')
    ('a', 'c')
    ('a', 'd')
    ('a', 'e')
    ('b', 'b')
    ('b', 'c')
    ('b', 'd')
    ('b', 'e')
    ('c', 'c')
    ('c', 'd')
    ('c', 'e')
    ('d', 'd')
    ('d', 'e')
    ('e', 'e')
>>> 
    ```

你可能感兴趣的:(迭代所有的组合或排列)