순열 파이썬 - sun-yeol paisseon

순열 파이썬 - sun-yeol paisseon

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

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

import itertools

순열

순열 파이썬 - sun-yeol paisseon

서로 다른 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')
"""

중복순열

순열 파이썬 - sun-yeol paisseon

중복 가능한 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')
"""

조합

순열 파이썬 - sun-yeol paisseon

서로 다른 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')
"""

중복조합

순열 파이썬 - sun-yeol paisseon

중복 가능한 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

댓글 접기 댓글 펼치기

이전 댓글 더보기

비밀글

등록