우노
[Python] itertools란? 본문
itertools란?
- itertools는 파이썬에서 반복되는 데이터를 처리하는 기능을 포함하고 있는 라이브러리이다.
- 제공하는 클래스는 매우 다양하지만, 코딩 테스트에서 가장 유용하게 사용할 수 있는 클래스는 permutations, combinations이다.
- permutations(순열)
- ex) 4개의 서로 다른 공 중에서 2개를 골라 나열하는 경우의 수
- 순열은 순서가 중요하므로, A B 와 B A 는 다른 경우로 취급
- nPr = n! / (n-r)!
- combinations(조합)
- ex) 4개의 공중에서 무작위로 2개의 공을 고르는 경우의 수
- 조합은 순서가 중요하지 않으므로, A B 와 B A 는 같은 경우로 취급
- nCr = n! / ((n-r)! * r!)
- permutations(순열)
permutations
permutations는 리스트와 같은 iterable 객체에서 r개의 데이터를 뽑아 일렬로 나열하는 모든 경우(순열)를 계산해준다.
permutations는 클래스이므로, 객체 초기화 이후에는 리스트 자료형으로 변환하여 사용한다.
리스트 [’A’, ‘B’, ‘C’]에서 3개(r=3)를 뽑아 나열하는 모든 경우를 출력하는 예시는 다음과 같다.
from itertools import permutations data = ['A', 'B', 'C'] result = list(permutations(data, 3)) print(result) # [('A', 'B', 'C'), ('A', 'C', 'B'), ('B', 'A', 'C'), # ('B', 'C', 'A'), ('C', 'A', 'B'), ('C', 'B', 'A')]
combinations
combinations는 리스트와 같은 iterable 객체에서 r개의 데이터를 뽑아 순서를 고려하지 않고 나열하는 모든 경우(조합)를 계산한다.
combinations는 클래스이므로, 객체 초기화 이후에는 리스트 자료형으로 변환하여 사용한다.
리스트 [’A’, ‘B’, ‘C’]에서 2개(r=2)를 뽑아 순서에 상관없이 나열하는 모든 경우를 출력하는 예시는 다음과 같다.
from itertools import combinations data = ['A', 'B', 'C'] result = list(combinations(data, 2)) print(result) # [('A', 'B'), ('A', 'C'), ('B', 'C')]
product
product는 permutations와 같이 리스트와 같은 iterable 객체에서 r개의 데이터를 뽑아 일렬로 나열하는 모든 경우(순열)를 계산한다.
다만 원소를 중복하여 뽑는다.
product 객체를 초기화할 때는 뽑고자 하는 데이터의 수를 repeat 속상값으로 넣어준다.
product는 클래스이므로 객체 초기화 이후에는 리스트 자료형으로 변환하여 사용한다.
리스트 [’A’, ‘B’, ‘C’]에서 중복을 포함하여 2개(r=2)를 뽑아 나열하는 모든 경우를 출력하는 예시는 다음과 같다.
from itertools import product data = ['A', 'B', 'C'] result = list(product(data, repeat=2)) print(result) # [('A', 'A'), ('A', 'B'), ('A', 'C'), # ('B', 'A'), ('B', 'B'), ('B', 'C'), # ('C', 'A'), ('C', 'B'), ('C', 'C')]
combinations_with_replacement
combinations_with_replacement는 combinations와 같이 리스트와 같은 iterable 객체에서 r개의 데이터를 뽑아 순서를 고려하지 않고 나열하는 모든 경우(조합)를 계산한다.
다만 원소를 중복해서 뽑는다.
combinations_with_replacement는 클래스이므로 객체 초기화 이후에는 리스트 자료형으로 변환하여 사용해야 한다.
리스트 [’A’, ‘B’, ‘C’]에서 중복을 포함하여 2개(r=2)를 뽑아 순서에 상관없이 나열하는 모든 경우를 출력하는 예시는 다음과 같다.
from itertools import combinations_with_replacement data = ['A', 'B', 'C'] result = list(combinations_with_replacement(data, 2)) print(result) # [('A', 'A'), ('A', 'B'), ('A', 'C'), # ('B', 'B'), ('B', 'C'), # ('C', 'C')]
참고
- 이것이 취업을 위한 코딩 테스트다. with Python
'Language > Python' 카테고리의 다른 글
[Python] bisect란? (0) | 2022.09.18 |
---|---|
[Python] 깊은 복사 (0) | 2022.09.08 |
[Python] 우선순위큐(heapq) 사용법 (0) | 2022.07.02 |
[Python] Numpy 평균, 표준편차, 분산 계산 (0) | 2022.07.02 |
[Python] 파이썬 빠르게 입력 받기 (sys.stdin.readline) (0) | 2022.06.12 |