美文网首页
迭代所有的组合或排列

迭代所有的组合或排列

作者: panxd | 来源:发表于2017-07-20 21:59 被阅读0次
  • 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')
>>> 
    ```

相关文章

  • 迭代所有的组合或排列

    1.思考:有的时候,我们希望对一系列元素所有可能的组合或者排列进行迭代。 2.解决方法:使用itertools模块...

  • 【2017-09-26】迭代器与生成器(四)

    可迭代对象进行排列组合迭代遍历可迭代对象所有可能的排列或组合运用itertools模块的permutations(...

  • itertools --迭代所有可能的组合或排列

    问题:想对一系列元素所有可能的组合或排列进行迭代 1、itertools.permutations() 它接受一个...

  • 读书点亮生活

    本月任务,听书,心法阅读,折书!带着问题去阅读。激活原有的知识技能。重新排列组合。提升思维和认知。知识迭代,能力迭...

  • 教学排列与组合2

    今天,继续教学排列与组合。主要就是让孩子明白有的事情与顺序有关(排列),有的事情与顺序无关(组合)。 先出示用5,...

  • Python一天一模块:itertools 迭代器工具和排列组合

    itertools 是实现各种迭代生成的工具, 尤其重要的是可以实现排列和组合的问题. 返回的一般都是迭代器. 合...

  • 时间长了就生疏的排列组合

    排列数:组合数:全排列:排列是先组合再排列: 最基本的排列组合公式,不能忘在脑后,应该熟稔于心。 排列和组合的区...

  • 排列组合公式及排列组合算法

    排列组合公式 排列组合公式/排列组合计算公式 公式P是指排列,从N个元素取M个进行排列。 公式C是指组合,从N个元...

  • 排列组合-js

    排列组合 数学相关知识:5分钟彻底了解排列组合 参考:程序员必备算法——排列组合 排列有序,组合无序 3选2 :排...

  • 基本函数用法 (n)

    nchoosek()--排列组合函数 MATLAB函数中用nchoosek 来实现二项式系数或所有组合 语法: C...

网友评论

      本文标题:迭代所有的组合或排列

      本文链接:https://www.haomeiwen.com/subject/mcojkxtx.html