迭代所有的組合或排列

  • 1.思考:有的時(shí)候,我們希望對(duì)一系列元素所有可能的組合或者排列進(jìn)行迭代。

  • 2.解決方法:使用itertools模塊中提供的函數(shù)

    • itertools.permutations() :以一個(gè)元素集合作為此方法的參數(shù),將某個(gè)元素集合中的所有元素重排列為所有可能的元祖序列,并返回。打亂元素順序
    >>> 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`:
 * 提供一個(gè)可選長度參數(shù),可得到以該參數(shù)為長度的所有全排列;
 
```python
 >>> for per in permutations(items, 2):#2為參數(shù)
            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()`:

    * 產(chǎn)生輸入序列中所有元素的全部組合形式

```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')
>>> 
    ```
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • PYTHON-進(jìn)階-ITERTOOLS模塊小結(jié)轉(zhuǎn)自wklken:http://wklken.me/posts/20...
    C_Y_閱讀 1,171評(píng)論 0 2
  • 數(shù)組是一種可變的、可索引的數(shù)據(jù)集合。在Scala中用Array[T]的形式來表示Java中的數(shù)組形式 T[]。 v...
    時(shí)待吾閱讀 1,066評(píng)論 0 0
  • 1 itertools函數(shù) 以下模塊級(jí)別函數(shù)都構(gòu)造并返回iterator。有些iterator是無限長度的流,因此...
    lakerszhy閱讀 1,167評(píng)論 0 3
  • 國家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說閱讀 12,415評(píng)論 6 13
  • 你突然對(duì)一個(gè)女孩心動(dòng)了,她一天比一天更吸引你,隨著越來越了解她,你反而變得放不開手腳。你覺得她越來越優(yōu)秀,同時(shí)也為...
    默默喜歡你閱讀 556評(píng)論 10 3

友情鏈接更多精彩內(nèi)容