2014-02-16 5 views
1

각 길이가 0 또는 1 인 n- 길이 튜플의 가능한 모든 값을 나열하는 가변 길이 목록을 생성해야합니다. 따라서 2^n 개의 가능한 튜플이 있습니다. 예를 들어, N의 입력 = 3 내 목록은순열 생성

a=[(0, 0, 0), (0, 0, 1), (0, 1, 0), (0, 1, 1), (1, 0, 0), (1, 0, 1), (1, 1, 0), 
(1, 1, 1)] 

주 같아야합니다 : 내부 요소, 튜플있는 편리한 경우 목록을 사용하는 경우 그것은 중요하지 않습니다. 또한 최종 목록이 내 예제에 따라 정렬되지 않으면 많은 문제가되지 않습니다. 나는 현재 for 회 돌이를 사용하여이를 수행 할 수 있지만, 더 나은 방법이 있는지 궁금하다. 이것이 제가 작성한 코드입니다.

>>>>newlist=[] 
>>>>for i in range(2**n): 
      s=bin(i)[2:] #spliced to remove the leading '0b' in the string 
      s='0'*(n-len(s))+s #adding extra zeroes to beginning of string 
      buffer=tuple(int(i) for i in s) 
      newlist.append(buffer) 

내가 원하는 목록을 생성합니다. 더 나은, 한 - 라이너 방식으로 그것을 할 어떤 제안?

+1

처럼 itertools.product를 사용할 수 있습니다. – rlms

+0

내가 지금 막 얻은 대답은 아주 명확하게 증명한다. :) – Guy

답변

4

당신은 그냥 제목,`itertools` 당신의 친구입니다에서이

from itertools import product 
print list(product(range(2), repeat = 3)) 

출력

[(0, 0, 0), 
(0, 0, 1), 
(0, 1, 0), 
(0, 1, 1), 
(1, 0, 0), 
(1, 0, 1), 
(1, 1, 0), 
(1, 1, 1)] 
+1

whoa. 나는 이것이 심지어 존재했는지 전혀 몰랐다. 고마워. itertools 모듈에 대해 읽어야합니다. 나는 그것이 가능한 한 빨리 이것을 받아 들일 것이다 : D – Guy