2012-08-07 29 views
1

我想使用itertools從字母表中的每個字母中獲取所有3個字母的置換。這回來空白:在Python中獲取排列itertools

import itertools 

def permutations(ABCDEFGHIJKLMNOPQRSTUVWXYZ, r=3): 
    pool = tuple(iterable) 
    n = len(pool) 
    r = n if r is None else r 
    for indices in product(range(n), repeat=r): 
     if len(set(indices)) == r: 
      yield tuple(pool[i] for i in indices) 

我做錯了什麼?

+0

'iterable'定義在哪裏?請包括語法上有效的代碼 – jamylak 2012-08-07 06:10:09

+0

我只是試圖從文檔中學習,http://docs.python.org/library/itertools就是這樣說的。 – Damien 2012-08-07 06:11:37

+1

這不是它說你改變了它。此外,這只是解釋「排列」的代碼 – jamylak 2012-08-07 06:12:20

回答

7

itertools.permutations文檔中的代碼說明如何在功能實現,而不是如何使用它。要做到這一點:

perms = itertools.permutations('ABCDEFGHIJKLMNOPQRSTUVWXYZ', r=3) 

您可以將其轉換爲一個列表(print(list(perms)))全部打印出來,但你可以遍歷他們在for循環,如果你想做些別的事情與他們 - 例如,

for perm in perms: 
    ... 
+0

非常感謝!如果我遍歷它們,它會使用ABC還是(A,B,C)? – Damien 2012-08-07 06:19:19

+0

@Damien'('A','B','C')' – jamylak 2012-08-07 06:20:36

10

你有點混淆,那只是解釋permutations做什麼的代碼。 itertools實際上是用C代碼編寫的,python 等價於只是給出它的工作原理。

>>> from itertools import permutations 
>>> from string import ascii_uppercase 
>>> for x in permutations(ascii_uppercase, r=3): 
     print x 


('A', 'B', 'C')  
('A', 'B', 'D') 
('A', 'B', 'E')  
('A', 'B', 'F') 
..... 

這應該做工精細