2012-08-07 3 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

+0

나는 docs에서 배우려고 노력하고 있습니다. http://docs.python.org/library/itertools 그것이 말하는 내용입니다. – Damien

+1

그건 당신이 그것을 바꿨다고 말한 것이 아닙니다. 또한 그것은 단지'permutations'이 무엇인지 설명하는 코드입니다. – jamylak

답변

7

itertools.permutations 문서의 코드는 기능이 구현되는 방법을 설명하지 그것을 사용하는 방법에 대해 설명합니다. 이 작업을 수행 할 :

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

당신은 목록 (print(list(perms)))로 변환하여 모두 밖으로 인쇄 할 수 있습니다,하지만 당신은 그들과 다른 뭔가를하고 싶은 경우에 당신은 단지 for 루프에서 그들을 반복 할 수 - 예 :

for perm in perms: 
    ... 
+0

고마워요! 내가 ABC 나 (A, B, C)를 사용할 것인가? – Damien

+0

@Damien'('A', 'B', 'C')' – jamylak

10

당신은 조금 섞여 있습니다. 그것은 단지 permutations의 코드입니다. itertools은 실제로 C 코드로 작성되었으며, 등가은 어떻게 작동하는지 보여주기 위해 제공됩니다. 잘 작동합니다

>>> 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') 
.....