2015-01-23 7 views
2

파이썬에서 모든 숫자 목록을 인쇄해야합니다. 파이썬 목록 번호

def lists(listNum, i):  

    if i == len(listNum) - 1: 
     print listNum  
    else:  
     for j in range(i, len(listNum)): 
      listNum[i], listNum[j] = listNum[j], listNum[i]  
      lists(listNum, i + 1)  
      listNum[i], listNum[j] = listNum[j], listNum[i]  

lists([1, 2, 3], 0) 

가 어떻게 번 씩만 목록을 인쇄 할 수 있습니다

지금까지 내가 쓴? 목록에 중복 요소가있는 경우 (예 : 1,1,2이면 동일한 순서를 여러 번 인쇄합니다. 이걸 어떻게 막을 수 있니?

나는 무엇을 해야할지 잘 모릅니다. 다른 사람이 두 번 인쇄를 방지하는 방법을 알고 있습니까? 추가 된 내용의

+5

어떤 이유 ['itertools.permutations()'(https://docs.python.org/2/library/itertools. html # itertools.permutations)? –

+0

itertools ..없이 재귀 적으로이 작업을 수행해야합니다. –

+0

실제로 재귀가 필요한지 의심 스럽습니다. Martijn이 제공하는 링크에서 제공되는 동등한 기능만으로도 충분합니다. 기술적으로, 당신은 어쨌든 itertools를 가져 오지 않을 것입니다. – Manhattan

답변

2

보관할 트랙 : 사용하지 않는

def permute(a, i, seen=set()): 
    if i == len(a): 
     if tuple(a) not in seen: 
      seen.add(tuple(a)) 
      print(a) 
    else: 
     for j in xrange(i,len(a)): 
      a[i], a[j] = a[j], a[i] 
      permute(a, i + 1,seen) 
      a[i], a[j] = a[j], a[i] 

print(permute([1, 1, 3], 0)) 
[1, 1, 3] 
[1, 3, 1] 
[3, 1, 1]