"0000111"문자열의 다른 순열을 찾으려고합니다. 3 개의 1과 4 개의 0을 포함하는 모든 다른 문자열. 내 코드 :왜 python의 itertools 순열에는 반복되는 요소가 많이 있습니까?
p = itertools.permutations("0000111")
l = list(p)
print len(l) #5040
print len(set(l)) #35
무엇이 잘못 되었습니까? 그리고 더 좋은 방법이 있습니까?
"0000111"문자열의 다른 순열을 찾으려고합니다. 3 개의 1과 4 개의 0을 포함하는 모든 다른 문자열. 내 코드 :왜 python의 itertools 순열에는 반복되는 요소가 많이 있습니까?
p = itertools.permutations("0000111")
l = list(p)
print len(l) #5040
print len(set(l)) #35
무엇이 잘못 되었습니까? 그리고 더 좋은 방법이 있습니까?
이 설명서에있다 : http://docs.python.org/2.7/library/itertools.html#itertools.permutations
요소가없는 자신의 가치에 자신의 위치를 기반으로 독특한로 처리됩니다. 따라서 입력 요소가 고유하면 각 순열에 반복 값이 없습니다.
즉, itertools.permutations('000')
은 행복하게 3을 제공합니다. = 6 결과, 모두가 '000'
입니다.
는 자신에 대한 참조 : 당신은 비트 맵으로 문제를 해석하면 http://ideone.com/gzqolT
귀하의 문제가 해결 될 수 있습니다. itertools.combinations(S,r)
은 S
의 모든 하위 집합에 r
개의 항목을 제공합니다. 예 : S = range(7)
및 r = 3
list('{0:07b}'.format(sum(subset))
for subset in itertools.combinations((2**s for s in range(7)), 3))
조금 :
(2**s for s in range(7))
2~6^2 개까지의 모든 힘의 발생이다.itertools.combinations(…, 3)
은 2의 이들 3 개의 항목을 갖는 모든 서브 세트를 발견한다.sum(subset)
은 예를 들어, = 7.'{0:07b}'.format(…)
[1,2,4]
실제로 제
개까지의 길이로 제로 패딩되어 이진수로 입력 INT를 포맷, 그들이 [조합] 원하는 같은데 (HTTP : //docs.python .org/2.7/library/itertools.html # itertools.combinations) – SethMMorton