일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- AWS
- docker
- Util
- MongoDB
- Android
- Crawling
- mongoose
- DATABASE
- algorithm
- Scheduling
- linux
- OS
- postman
- python
- React
- macos
- TypeScript
- ubuntu
- Network
- node.js
- Kotlin
- typeorm
- sequelize
- HTML
- css
- wireshark
- Express
- S3
- mysql
- OOAD
- Today
- Total
Seongwon Lim
[Python] itertools 라이브러리를 이용한 조합&순열 구하기 본문
서론
이번 글에서는 파이썬에서 제공하는 itertools 라이브러리를 이용하여 리스트 내에 있는 데이터들의 순열, 조합, 데카르트 곱을 구하는 방법을 간단하게 알아보고자 한다.
순열 (permutations) 구하기
리스트 내에 있는 데이터 중에서 원소가 n개인 순열을 추출하기 위해서는 다음과 같이 코드를 구성할 수 있다.
from itertools import permutations
data = [1, 2, 3, 4, 5, 6]
flag = 0
# 2번째 인자에는 추출할 원소 개수를 정의한다.
for p in permutations(data, 2):
print(p, end=' ')
if flag == 6:
print('\n')
flag = 0
출력 결과는 다음과 같다. flag 변수는 결과를 보기 좋게 출력하기 위해 넣어둔 코드로 없어도 무방하다.
6개의 데이터 중 2개를 추출하여 배열 순서를 고려한 가능한 모든 경우의 수를 리턴한다. 확통에서 배우는 6P2와 같은 의미이다.
조합 (combinations) 구하기
리스트 내에 있는 데이터 중에서 원소가 n개인 조합을 추출하기 위해서는 다음과 같이 코드를 구성할 수 있다.
from itertools import combinations
data = [1, 2, 3, 4, 5, 6]
flag = 0
# 2번째 인자에는 추출할 원소 개수를 정의한다.
for c in combinations(data, 2):
print(c, end=' ')
flag += 1
if flag == 6:
print('\n')
flag = 0
출력 결과는 다음과 같다.
6개의 데이터 중 2개를 추출하여 배열 순서를 고려하지 않은 가능한 모든 경우의 수를 리턴한다. 확통에서 배우는 6C2와 같은 의미이다.
combinations, permutations 함수는 하나의 리스트를 가지고 처리할 때 유용하게 사용할 수 있다.
데카르트 곱 (product) 구하기
데카르트 곱은 영어로 Cartesian Product 라고도 불리는데, 의미는 두 집합(리스트)으로부터 각각 원소를 하나씩 추출한 순서쌍으로 이루어진 리스트를 만들어주는 연산이다.
예를 들어 2개의 리스트 ['A', 'B'], [1, 2] 가 있다면 카티시안 곱을 통해 나올 수 있는 경우의 수는 다음과 같다.
('A', 1), ('A', 2), ('B', 1), ('B', 2)
이제 데카르트 곱을 파이썬 코드를 통해 구현해보자.
from itertools import product
l1 = ['A', 'B']
l2 = [1, 2]
# 3번째 인자에는 반복할 횟수를 정의한다.
for d in product(l1, l2, repeat=1):
print(d, end=' ')
코드의 결과는 다음과 같다.
물론 데카르트 곱에 사용할 리스트가 2개보다 많다면 product 인자에 (l1, l2, l3) 처럼 더 많이 정의할 수도 있다.
또한 1개의 리스트를 가지고 반복을 여러 번 돌려서 데카르트 곱을 수행할 수도 있다.
from itertools import product
l1 = ['A', 'B']
for d in product(l1, repeat=2):
print(d, end=' ')
리스트 뿐만 아니라 문자열을 통해서도 데카르트 곱을 수행할 수 있다.
from itertools import product
l1 = 'ABCD'
for d in product(l1, repeat=2):
print(d, end=' ')
출처
'Python' 카테고리의 다른 글
[Python] 숫자, 문자열 거꾸로 출력하기 (0) | 2022.07.12 |
---|---|
[Python] 딕셔너리(Dictionary) 정렬하는 법 (0) | 2022.07.09 |
[Python] json 데이터를 dictionary로 변경하기 (0) | 2022.05.30 |
[Python] Pandas to_csv()를 이용한 csv 파일 저장 (0) | 2022.05.30 |
[Python] KoNLPy를 이용하여 문장에서 명사 추출하기 (0) | 2022.05.27 |