Itertools, 이터툴즈
Itertools는 파이썬 내장 라이브러리입니다. 주요 기능은 파이썬에서 반복되는 데이터(iterable 한 데이터)를 처리하는 기능을 포함하고 있습니다. 반복 가능한 데이터, 즉 이터러블(iterable)한 데이터는 반복문에서 사용할 수 있는 데이터를 말합니다. 대표적으로 리스트(list), 셋(set), 튜플(tuple)이 있습니다. 즉 이터툴즈는 이터러블한 데이터를 처리하는데 도움을 주는 모듈입니다. 이 중에서 가장 많이 사용되는 5가지 함수에 대해서 알아보겠습니다.
- accumulate, 누적합
- permutations, 순열
- product, 곱집합 또는 데카르트 곱
- combinations, 조합
- combinations_with_replacement, 중복조합
accumulate( iterable, [ func, *, initial=None ] ), 누적합
누적 합계나 다른 이항 함수( func 인자를 통해 지정 )의 누적 결과를 반환합니다. func이 제공되면, 두 인자를 취하는 함수여야 합니다.
# 예시코드
import itertools
number_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
accumulate_result = list(itertools.accumulate(number_list))
print(accumulate_result)
# 출력 결과
[1, 3, 6, 10, 15, 21, 28, 36, 45, 55]
permutations( iterable, r=None ), 순열
Iterable에서 원소의 개수가 r개인 순열을 반환합니다. r의 값이 지정되지 않았거나 None이면, r의 기본값은 iterable의 길이이며 가능한 모든 최대 길이의 순열이 생성됩니다. 특징은 중복이 없고 정렬되어 있으며 모든 가능한 경우를 반환합니다.
- ( A, B )가 반환되면 (B, A)도 반환되기 때문에 정수형 데이터를 Sum 로직을 구현할 때 combinations(조합)이 더 적합하다.
import itertools
data_list = ['애플', '구글', '테슬라']
# r=3, r = len(data_list)
permutations_result_1 = list(itertools.permutations(data_list))
print(permutations_result_1)
# r=2
permutations_result_2 = list(itertools.permutations(data_list, 2))
print(permutations_result_2)
# r=3
[ ('애플', '구글', '테슬라'),
('애플', '테슬라', '구글'),
('구글', '애플', '테슬라'),
('구글', '테슬라', '애플'),
('테슬라', '애플', '구글'),
('테슬라', '구글', '애플') ]
# r=2
[ ('애플', '구글'),
('애플', '테슬라'),
('구글', '애플'),
('구글', '테슬라'),
('테슬라', '애플'),
('테슬라', '구글') ]
product( *iterables, repeat=1 ), 곱집합 or 데카르트 곱
입력된 iterable 데이터들의 데카르트 곱을 반환합니다. iterable의 자신과의 곱을 계산하려면, repeat 인자에 반복 횟수를 지정합니다. ex) product( Z, repeat=3 )는 product( Z, Z, Z )와 같습니다. permutations에서 중복까지 더한 함수입니다.
import itertools
data = ['애플', '구글', '테슬라']
product_result = list(itertools.product(data, repeat = 2))
print(product_result)
# 곱집합 or 데카르트 곱
[ ('애플', '애플'),
('애플', '구글'),
('애플', '테슬라'), # 1
('구글', '애플'),
('구글', '구글'),
('구글', '테슬라'), # 2
('테슬라', '애플'),
('테슬라', '구글'),
('테슬라', '테슬라') ] # 3
combinations( iterable, r ), 조합
Iterable에서 원소의 개수가 r개인 조합을 반환합니다. 특징은 중복이 없고 가능한 경우를 반환합니다.
- ( A, B )가 반환되면 (B, A)는 반환되지 않기 때문에 정수형 데이터를 Sum 로직을 구현할 때 적합하다.
import itertools
data_list = ['애플', '구글', '테슬라']
# r=3, 3개를 뽑는 모든 조합 구하기
combinations_result_1 = list(itertools.combinations(data_list, 3))
print(combinations_result_1)
# r=2, 2개를 뽑는 모든 조합 구하기
combinations_result_2 = list(itertools.combinations(data_list, 2))
print(combinations_result_2)
# r=3
[ ('애플', '구글', '테슬라') ]
# r=2
[ ('애플', '구글'),
('애플', '테슬라'),
('구글', '테슬라') ]
combinations_with_replacement( iterable, r ), 중복 조합
Iterable에서 원소의 개수가 r개인 조합을 '중복 포함하여' 반환합니다.
import itertools
data_list = ['애플', '구글', '테슬라']
# r=3, 3개를 뽑는 중복 조합 구하기
combinations_with_replacement_result_1 = list(itertools.combinations_with_replacement(data_list, 3))
print(combinations_with_replacement_result_1)
# r=2, 2개를 뽑는 중복 조합 구하기
combinations_with_replacement_result_2 = list(itertools.combinations_with_replacement(data_list, 2))
print(combinations_with_replacement_result_2)
# r=3
[ ('애플', '애플', '애플'),
('애플', '애플', '구글'),
('애플', '애플', '테슬라'),
('애플', '구글', '구글'),
('애플', '구글', '테슬라'),
('애플', '테슬라', '테슬라'),
('구글', '구글', '구글'),
('구글', '구글', '테슬라'),
('구글', '테슬라', '테슬라'),
('테슬라', '테슬라', '테슬라') ]
# r=2
[ ('애플', '애플'),
('애플', '구글'),
('애플', '테슬라'),
('구글', '구글'),
('구글', '테슬라'),
('테슬라', '테슬라') ]
Reference
'PROGRAMMING > Python' 카테고리의 다른 글
[Python] Dictionary get method (파이썬 딕셔너리 팁) (44) | 2023.04.03 |
---|---|
[Python] 파이썬 배열 [:] / [::] 사용법 (feat.list slicing syntax) (40) | 2023.03.01 |
[Python] 파이썬 분수, 표현 / 연산 / 변환 (feat.Fractions module) (7) | 2023.02.11 |
[Python for AI]파이썬 객체지향프로그래밍 기법, Python Object-Oriented Programming(OOP) (11) | 2022.12.09 |
[Python for AI]파이썬 데이터 구조 - 스택*Stack, 큐*Queue, 튜플*Tuple, 집합*Set, 사전*Dictionary (5) | 2022.12.07 |