순열 파이썬 - sun-yeol paisseon

 알고리즘 문제를 풀면 순열과 조합을 쓸일이 있다.

구현하는 것도 나쁘지 않지만 시간이 급박할 때에는 직접구현보다는 라이브러리를 활용하는 것이 좋다.

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.12

python - 순열 (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개를 추출

# 중복 순열 from itertools import product arr = [1,2,3,4] print(list(product(arr, repeat=3)))

 

순열 직접구현

# 재귀를 통한 순열 구현 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

댓글 접기 댓글 펼치기

이전 댓글 더보기

비밀글

등록

Toplist

최신 우편물

태그