알고리즘/문법정리

[ 파이썬 ] 파이썬 순열, 조합 구하기 ( import itertools )

jungeun960 2021. 4. 27. 18:04

순열(permutations) nPr

  • 순서 고려해서 나열한 경우의 수
  • itertools.permutations( items , r ) : 리스트에서 r개의 원소를 골라 순열 결과를 리턴
import itertools

items = ['A', 'B', 'C']
nPr = itertools.permutations(items, 2) # 리스트에서 2개의 원소를 골라 순서정해 나열
print(list(nPr))
>>> [('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'C'), ('C', 'A'), ('C', 'B')]

# items의 모든 원소를 가지고 순열을 만든다
print(list(map(''.join, itertools.permutations(items))))
>>> ['ABC', 'ACB', 'BAC', 'BCA', 'CAB', 'CBA']

# 2개의 원소를 가지고 순열을 만든다
print(list(map(''.join, itertools.permutations(items, 2))))
>>> ['AB', 'AC', 'BA', 'BC', 'CA', 'CB']

 

+ 숫자 형태의 경우 map(str, 리스트명)의 과정이 추가로 들어가야 함

  • str.join -> iterable iterable에서 문자열을 연결 한 문자열을 반환합니다
  • 때문에 숫자를 문자로 변경하지 않으면 'TypeError: sequence item 0: expected str instance, int found' 발생
import itertools

# 숫자형태의 경우
nums=[3,1,2,4]
print(list(map(''.join, itertools.permutations(map(str,nums), 2))))
>>>	['31', '32', '34', '13', '12', '14', '23', '21', '24', '43', '41', '42']

 

조합(combination) nCr

  • 순서 고려하지 않고 나열한 경우의 수 -> 뽑는 순서는 중요하지 않다
  • itertools.combinations( items , r ) : 리스트에서 r개의 원소를 골라 조합 결과를 리턴
import itertools

items = ['A', 'B', 'C']
nCr = itertools.combinations(items, 2)
print(list(nCr))
>>> [('A', 'B'), ('A', 'C'), ('B', 'C')]
반응형