오늘은 python 에서 반복적인 데이터를 처리하는 기능을 가진 itertools 라이브러리의 주요한 클래스에 대해 알아봅시다.
저는 java로 먼저 코테 문제를 풀다가 python 으로 언어를 변경했는데,
이 때 python의 가장 강력한 장점 중 하나가 바로 이러한 모듈들을 직접 구현하지 않고 라이브러리를 사용만 하면 간단히 구현할 수 있다는 점인 것 같아요!
iterable 객체를 가지고 주로 사용하는데,
이 때 iterable은 반복 가능한 List, Dictionary, Tuple 자료형 같은 객체를 말합니다.
permutations
1. 단어의 뜻
먼저 사용하기 전! permutation 사전적 정의가 무엇일까요?
"순열" 서로 다른 원소를 가진 집합에서 대상을 선택하여 순서있게 배열하는 것을 말합니다.
즉, 순서가 있는 조합을 계산합니다.
2. 설명
permutations는 반복 가능한 iterable 객체에서 r개의 데이터를 뽑아 일렬로 나열하는 모든 경우(순열)을 계산해줍니다.
이렇게 친절히 사용하려고 하면 옆에 설명과 함께 예시도 확인할 수 있는데요.
0, 1, 2 중에서 2개를 뽑아서 모든 조합을 나열하면 6개의 조합을 리턴합니다.
순열을 계산해주므로 순서를 고려하여 값들이 리턴하는 것을 확인할 수 있습니다.
이 때 permutations는 클래스 이기 때문에 객체 초기화 이후에는 리스트와 같은 자료형으로 변환하여 사용해야 합니다!
바꾸지 않으면 이렇게 객체를 그대로 리턴해서 원하는 값을 제대로 확인할 수 없겠죠?
3. 예시 코드
from itertools import permutations
data = ['가', '나', '다']
result = list(permutations(data, 3))
print(result)
#[('가', '나', '다'), ('가', '다', '나'), ('나', '가', '다'), ('나', '다', '가'), ('다', '가', '나'), ('다', '나', '가')]
combinations
1. 단어의 뜻
combination 이라는 단어는 우리가 흔하게 사용하는 단어이죠.
조합을 뜻하는데, 순열과 다르게
서로 다른 원소를 가진 집합에서 순서를 고려하지 않고 원소들을 택해서 부분집합을 만듭니다.
2. 설명
combinations는 iterable 객체에서 r개의 데이터를 뽑아 순서를 고려하지 않고 나열하는 모든 경우(조합)을 계산합니다.
순서의 고려 여부에 따라 사용할 수 있겠죠?
- 순서가 있는 모든 조합을 계산할 땐 permutations
- 순서가 필요 없는 모든 조합을 계산할 땐 combinations
마찬가지로 클래스 이기 때문에 리스트로 변환해서 사용해야 합니다.
3. 예시 코드
from itertools import combinations
data = ['가', '나', '다']
result = list(combinations(data, 2))
print(result)
#[('가', '나'), ('가', '다'), ('나', '다')]
product
1. 설명
product는 permutations와 같이 r개의 데이터를 뽑아 모든 경우(순열)을 계산하는데
다만, 차이점은 원소를 중복해서 뽑아 리턴합니다.
product 객체를 초기화 할 때 repeat 속성값으로 뽑고자 하는 데이터 수를 넣어줘야 합니다.
즉, 리스트에서 중복을 포함하여 r개를 뽑아 나열하는 모든 경우(순열)를 리턴합니다.
2. 예시 코드
from itertools import product
data = ['가', '나', '다']
result = list(product(data, repeat=2)) #중복을 허용하여 리스트 중에서 2개를 뽑는 모든 순열 구하기
print(result)
#[('가', '가'), ('가', '나'), ('가', '다'), ('나', '가'), ('나', '나'), ('나', '다'), ('다', '가'), ('다', '나'), ('다', '다')]
combinations_with_replacement
1. 설명
combinations_with_replacement는 combinations와 동일한데 원소를 중복해서 뽑아 리턴합니다.
product와 유사하죠?
즉, 리스트에서 중복을 포함하여 r개의 데이터를 뽑아 순서를 고려하지 않고 나열하는 모든 경우(조합)을 계산합니다.
2. 예시 코드
from itertools import combinations_with_replacement
data = ['가', '나', '다']
result = list(combinations_with_replacement(data,2))
print(result)
#[('가', '가'), ('가', '나'), ('가', '다'), ('나', '나'), ('나', '다'), ('다', '다')]
다시 정리하자면,
- permutations : 순서를 고려하여 모든 경우의 수 리턴 -> 순열
- combinations : 순서를 고려하지 않고 모든 경우의 수 리턴 -> 조합
- product : 순서를 고려하고 중복을 포함하여 모든 경우의 수 리턴
- combinations_with_replacement : 순서를 고려하지 않고 중복을 포함하여 모든 경우의 수 리턴
글 읽어주셔서 감사합니다 😊
공부 하면서 정리 한 내용이라, 혹시 잘못 된 부분이 있으면
얼마든지 댓글로 말씀해주세요!
'알고리즘' 카테고리의 다른 글
[Python] 리스트의 모든 최댓값의 인덱스 구하기 (0) | 2022.02.01 |
---|---|
[프로그래머스] 연습문제 - 나누어 떨어지는 숫자 배열 (0) | 2022.01.18 |
[프로그래머스] 2020 KAKAO 인턴십 (Lv1) : 키패드 누르기 (0) | 2022.01.12 |
[Python] bisect_left, bisect_right (0) | 2022.01.11 |
[Python] 2019 KAKAO BLIND RECRUITMENT - 오픈채팅방 (0) | 2021.11.15 |