알고리즘 문제를 풀면 순열과 조합을 쓸일이 있다.
구현하는 것도 나쁘지 않지만 시간이 급박할 때에는 직접구현보다는 라이브러리를 활용하는 것이 좋다.
import itertools순열
서로 다른 n 개 중에 r개를 나열하는 경우의 수
import itertools arr = ['1', '2', '3', '4'] per = list(itertools.permutations(arr, 2)) for ele in per: print(ele) """ ('1', '2') ('1', '3') ('1', '4') ('2', '1') ('2', '3') ('2', '4') ('3', '1') ('3', '2') ('3', '4') ('4', '1') ('4', '2') ('4', '3') """중복순열
중복 가능한 n개 중에 r개를 나열하는 경우의 수
import itertools arr = ['1', '2', '3', '4'] per = list(itertools.product(arr, repeat=2)) for ele in per: print(ele) """ ('1', '1') ('1', '2') ('1', '3') ('1', '4') ('2', '1') ('2', '2') ('2', '3') ('2', '4') ('3', '1') ('3', '2') ('3', '3') ('3', '4') ('4', '1') ('4', '2') ('4', '3') ('4', '4') """조합
서로 다른 n개 중에 r개를 선택하는 경우의 수 (원소의 순서 고려 X)
import itertools arr = ['1', '2', '3', '4'] com = list(itertools.combinations(arr, 2)) for ele in com: print(ele) """ ('1', '2') ('1', '3') ('1', '4') ('2', '3') ('2', '4') ('3', '4') """중복조합
중복 가능한 n개 중에 r개를 선택하는 경우의 수(원소의 순서 고려 X)
import itertools arr = ['1', '2', '3', '4'] com = list(itertools.combinations_with_replacement(arr, 2)) for ele in com: print(ele) """ ('1', '1') ('1', '2') ('1', '3') ('1', '4') ('2', '2') ('2', '3') ('2', '4') ('3', '3') ('3', '4') ('4', '4') """모든 원소 조합
여러개의 리스트의 모든 조합하는 경우의 수
import itertools arr1 = ['1', '2', '3', '4'] arr2 = ['A', 'B', 'C'] arr3 = ['ㄱ', 'ㄴ'] result = list(itertools.product(arr1, arr2, arr3)) for ele in result: print(ele) """ ('1', 'A', 'ㄱ') ('1', 'A', 'ㄴ') ('1', 'B', 'ㄱ') ('1', 'B', 'ㄴ') ('1', 'C', 'ㄱ') ('1', 'C', 'ㄴ') ('2', 'A', 'ㄱ') ('2', 'A', 'ㄴ') ('2', 'B', 'ㄱ') ('2', 'B', 'ㄴ') ('2', 'C', 'ㄱ') ('2', 'C', 'ㄴ') ('3', 'A', 'ㄱ') ('3', 'A', 'ㄴ') ('3', 'B', 'ㄱ') ('3', 'B', 'ㄴ') ('3', 'C', 'ㄱ') ('3', 'C', 'ㄴ') ('4', 'A', 'ㄱ') ('4', 'A', 'ㄴ') ('4', 'B', 'ㄱ') ('4', 'B', 'ㄴ') ('4', 'C', 'ㄱ') ('4', 'C', 'ㄴ') """
공유하기
게시글 관리
구독하기세상을 더 편하게저작자표시 비영리
'Programming > Python' 카테고리의 다른 글
[카카오 2021 인턴/파이썬] 미로 탈출 (0)2021.09.24[Python/파이썬] PriorityQueue & heapq / 우선순위큐와 힙큐 (0)2021.08.26[Python/파이썬]최소공배수 & 최대공약수 & 약수 (0)2021.08.23[Python/파이썬]함수로 정렬하기(소스만) (0)2021.08.22[Python/파이썬]파이썬으로 XML 처리하기 (0)2020.04.12python - 순열 (permutaions), 조합 (combinations), 중복순열, 중복조합
Python 2022. 3. 1. 12:37
반응형
python 을 이용하여 순열, 조합을 사용하여 문제를 해결할 때가 있다.
itertools 을 사용하면 간단하게 해결 가능하다.
직접 구현도 남기긴 하였지만 itertools 을 사용하여 간단히 해결하는게 깔끔하다.
순열
=> 반복 가능한 객체에 대해서 중복을 허용하지 않고 n개를 추출
=> 간단히 순서 의미있는 열
# 순열 from itertools import permutations arr = [1,2,3,4] print(list(permutations(arr, 3)))
중복순열
=> 반복 가능한 객체에 대해서 중복을 허용하고 n개를 추출
순열 직접구현
# 재귀를 통한 순열 구현 def permutations(arr, n): result = [] if n == 0: return [[]] for (i, num) in enumerate(arr): for j in permutations(arr[:i] + arr[i+1:], n-1): result.append([num] + j) return result permutation = permutations([1,2,3,4], 3) print(permutation)
조합
=> 반복 가능한 객체에 대해서 중복을 허용하지 않고 n개를 추출
=> 추출 순서 고려하지않음
# 조합 from itertools import combinations arr = [1,2,3,4] print(list(combinations(arr, 3)))
중복조합
=> 반복 가능한 객체에 대해서 중복을 허용하고 n개를 추출
# 중복 조합 from itertools import combinations_with_replacement arr = [1,2,3,4] print(list(combinations_with_replacement(arr, 3)))
조합 직접구현
# 재귀를 이용한 조합 구현 def combinations(arr, n): result = [] if n == 0: return [[]] for (i, num) in enumerate(arr): for j in combinations(arr[i+1:], n-1): result.append([num] + j) return result combination = combinations([1,2,3,4], 3) print(combination)반응형
공유하기
게시글 관리
구독하기Carl's Tech Blog저작자표시
'Python' 카테고리의 다른 글
python 리스트 최소 최대 값 구하는 법 / list min max (0)2021.11.29python 배열 리스트에 값 존재 확인 하는 법 (0)2021.11.29python: for 문 if 문 한 줄 코딩 하는법 (0)2021.11.18관련글 관련글 더보기
- python 리스트 최소 최대 값 구하는 법 / list min max
- python 배열 리스트에 값 존재 확인 하는 법
- python: for 문 if 문 한 줄 코딩 하는법
댓글 0
댓글 접기 댓글 펼치기이전 댓글 더보기
비밀글
등록