개발 인생/파이썬 준비물

itertools

견과류아몬드 2021. 6. 25. 17:40

문제 풀이를 하다보면 조합, 순열 등의 반복되는 연산을 하는 경우가 많다.

 

파이썬에는 조합과 순열의 기능이 라이브러리로 구현이 되어있다. 

 

itertools라는 라이브러리에 정리가 되어있다.

 

  • permutations: 순열
  • combinations: 조합
  • product: 중복 허용 순열
  • combinations_with_replacement: 중복 허용 조합

모두 리스트와 같은 iterable 객체에서 r개의 데이터를 뽑아 순서를 고려하여(or 고려하지 않고) 중복을 허용하여(or 허용하지 않고) 나열하는 모든 경우를 계산한다.

  • 데이터 목록과 뽑을 데이터의 개수를 인자로 넘겨준다

모두 클래스이므로 객체 초기화 이후에는 리스트 자료형으로 변환하여 사용한다. (까먹기 좋을 듯 하다.)

 

소스코드

from itertools import permutations, combinations, product, combinations_with_replacement

data = ['A', 'B', 'C'] # 데이터 준비

result = list(permutations(data, 3)) # 모든 순열 구하기

print(result)

result = list(combinations(data, 2)) #2개를 뽑는 모든 조합 구하기

print(result)

result = list(product(data, repeat=2)) # 2개를 뽑는 모든 순열 구하기(중복 허용)

print(result)

result = list(combinations_with_replacement(data, repeat=2)) # 2개를 뽑는 모든 조합 구하기(중복 허용)

print(result)

 

출력

#3개를 뽑는 순열
[('A', 'B', 'C'), ('A', 'C', 'B'), ('B', 'A', 'C'), ('B', 'C', 'A'), ('C', 'A', 'B'), ('C', 'B', 'A')]
#2개를 뽑는 조합
[('A', 'B'), ('A', 'C'), ('B', 'C')]
#2개를 뽑는 중복허용 순열
[('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'B'), ('B', 'C'), ('C', 'A'), ('C', 'B'), ('C', 'C')]
#2개를 뽑는 중복허용 조합
[('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'B'), ('B', 'C'), ('C', 'C')]

 

출처: https://velog.io/@gndan4/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EA%B4%80%EB%A0%A8-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%A3%BC%EC%9A%94-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC