728x90
순열을 이용해 완전탐색 문제를 풀 때, dfs와 같은 재귀를 사용해야만 하는 경우도 있다.
그러나 재귀는 overflow를 유도하는 가장 쉬운 방법이기 때문에 항상 사용할 때 유의해야 한다.
우리는 이제 순열 조합을 이용한 문제를 코드 한 줄로 풀 수 있다.
combinations() # 조합
combinations_with_replacement() # 중복조합
product() # 데카르트 곱
permutations() # 순열
combinations(iterable, r)
iterable에서 원소 개수가 r개인 조합 뽑기
from itertools import combinations
if __name__ == '__main__':
iterator = [1, 2, 3, 4]
for i in combinations(iterator, 3):
print(i)
출력 결과
(1, 2, 3)
(1, 2, 4)
(1, 3, 4)
(2, 3, 4)
combinations_with_replacement(iterable,r)
iterable에서 원소 개수가 r개인 중복 조합 뽑기
from itertools import combinations_with_replacement
if __name__ == '__main__':
iterator = [1, 2, 3, 4]
for i in combinations_with_replacement(iterator, 2):
print(i)
출력 결과
(1, 1)
(1, 2)
(1, 3)
(1, 4)
(2, 2)
(2, 3)
(2, 4)
(3, 3)
(3, 4)
(4, 4)
permutations(iterable,r)
iterable에서 원소 개수가 r개인 순열 뽑기
from itertools import permutations
if __name__ == '__main__':
iterator = [1, 2, 3, 4]
for i in permutations(iterator, 2):
print(i)
출력 결과
(1, 2)
(1, 3)
(1, 4)
(2, 1)
(2, 3)
(2, 4)
(3, 1)
(3, 2)
(3, 4)
(4, 1)
(4, 2)
(4, 3)
product(*iterables, repeat=1)
여러 iterable의 데카르트곱 반환
from itertools import product
if __name__ == '__main__':
iterator1 = ['A', 'B', 'C']
iterator2 = ['1', '2', '3']
for i in product(iterator1, iterator2, repeat=1):
print(i)
출력 결과
('A', '1')
('A', '2')
('A', '3')
('B', '1')
('B', '2')
('B', '3')
('C', '1')
('C', '2')
('C', '3')
728x90
'파이썬' 카테고리의 다른 글
파이썬 int(a/b)와 a//b 차이 (0) | 2023.07.06 |
---|---|
파이썬 이미지 파일 확장자명 한번에 바꾸기 (0) | 2023.06.10 |
[python] 프레임으로 나눠진 이미지들을 동영상으로 합치기 (0) | 2023.05.23 |
[Pytorch] custom dataset의 mean, std 구하기 (0) | 2023.05.23 |
M1, M2 맥북에서 아나콘다 파이썬 3.6 또는 3.7 설치하기 (0) | 2023.04.17 |