2011-04-20 3 views

답변

13

itertools.combinations의 설명서를 참조하십시오. http://www.python.org/download/

하는 다운로드 최신 버전을 시도해보십시오 : 최신 소스에서 다운로드 할 수 있습니다

def combinations(iterable, r): 
    # combinations('ABCD', 2) --> AB AC AD BC BD CD 
    # combinations(range(4), 3) --> 012 013 023 123 
    pool = tuple(iterable) 
    n = len(pool) 
    if r > n: 
     return 
    indices = range(r) 
    yield tuple(pool[i] for i in indices) 
    while True: 
     for i in reversed(range(r)): 
      if indices[i] != i + n - r: 
       break 
     else: 
      return 
     indices[i] += 1 
     for j in range(i+1, r): 
      indices[j] = indices[j-1] + 1 
     yield tuple(pool[i] for i in indices) 
+0

이것은 실제로 어떻게 작동합니까? 나는 + 무언가를 놓치고있는 것을 이해하려고 노력하고있다. 'indices' 배열은 풀의 어떤 요소가 사용되는지 알려주지 만, 반복을 포함하지 않는 인덱스 집합을 생성하는 방법을 파악할 수 없습니다. –

+1

@ JasonS, 몇 가지 점 : 첫째, 예제에서 알 수 있듯이, 알고리즘은'indices'가 항상 정렬 된 튜플 (특히 반복을 허용하지 않는'indices [i] user3780389

+0

@JasonS 나는 else : return 문에 대해 혼란스러워합니다. 거기에 들여 쓰기가 무엇입니까? 실행될 때, 이것에 해당하는 경우는 무엇입니까? – MaPy

1

:이 기능에 대한 해당 코드가 Python 2.7.1 실제 소스 코드는 C로 작성 할 수 있습니다

관련 문제