迭代所有的组合或排列

  • 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')
>>> 
    ```
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • PYTHON-进阶-ITERTOOLS模块小结转自wklken:http://wklken.me/posts/20...
    C_Y_阅读 1,215评论 0赞 2
  • 数组是一种可变的、可索引的数据集合。在Scala中用Array[T]的形式来表示Java中的数组形式 T[]。 v...
    时待吾阅读 1,093评论 0赞 0
  • 1 itertools函数 以下模块级别函数都构造并返回iterator。有些iterator是无限长度的流,因此...
    lakerszhy阅读 1,226评论 0赞 3
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 13,087评论 6赞 13
  • 你突然对一个女孩心动了,她一天比一天更吸引你,随着越来越了解她,你反而变得放不开手脚。你觉得她越来越优秀,同时也为...
    默默喜欢你阅读 590评论 10赞 3

友情链接更多精彩内容