반응형
번호 목록이 있습니다.
numbers = [1, 2, 3, 7, 7, 9, 10]
보시다시피이 목록에 숫자가 두 번 이상 나타날 수 있습니다.
주어진 합계를 가진 이러한 숫자의 모든 조합을 가져와야합니다. 10
.
조합의 항목은 반복 될 수 없지만 숫자
의 각 항목은 고유하게 취급되어야합니다. 즉, 목록에있는 두 개의 7
은 동일한 값을 가진 서로 다른 항목을 나타냅니다.
순서는 중요하지 않으므로 [1, 9]
및 [9, 1]
은 동일한 조합입니다.
조합에 대한 길이 제한은 없습니다. [10]
은 [1, 2, 7]
만큼 유효합니다.
위의 기준을 충족하는 모든 조합의 목록을 만들려면 어떻게해야하나요?
이 예에서는 [[1,2,7], [1,2,7], [1,9], [3,7], [3,7], [10]] < / 코드>
해결 방법
itertools를 사용하여 가능한 모든 크기의 모든 조합을 반복하고 합계가 10이 아닌 모든 항목을 필터링 할 수 있습니다.
import itertools
numbers = [1, 2, 3, 7, 7, 9, 10]
result = [seq for i in range(len(numbers), 0, -1) for seq in itertools.combinations(numbers, i) if sum(seq) == 10]
print result
결과:
[(1, 2, 7), (1, 2, 7), (1, 9), (3, 7), (3, 7), (10,)]
불행히도 이것은 O (2 ^ N) 복잡성과 비슷하므로 20 개 요소보다 큰 입력 목록에는 적합하지 않습니다.
참조 페이지 https://stackoverflow.com/questions/34517540
반응형
'파이썬' 카테고리의 다른 글
파이썬 응답의 개체가 구독 가능한 Python http 게시 요청이 아닙니다. (0) | 2020.11.11 |
---|---|
파이썬 목록 / 하위 목록 선택 -1 이상 (0) | 2020.11.11 |
파이썬에서 클래스의 인스턴스를 동적으로 만드는 방법은 무엇입니까? (0) | 2020.11.11 |
파이썬 How do I make Python 3.5 my default version on MacOS? (0) | 2020.11.11 |
파이썬 Pandas에서 여러 열을 다른 열로 나누기 (0) | 2020.11.11 |
댓글