permutations (순열)
파이썬의 permutations 함수는 순열을 생성하여, 주어진 순서로 뽑을 수 있는 모든 경우의 수를 구한다. 순서가 중요한 경우에 사용된다. itertools 모듈에 포함되어 있어 사용 전에 이 모듈을 임포트해야 한다.
기본 구문
from itertools import permutations
permutations(iterable, r)
- iterable : 순열을 생성할 대상 (리스트, 문자열 등).
- r : 순열의 길이 (뽑을 개수). r을 생략하면 기본값은 len(iterable)로 설정된다.
사용 방법
1️⃣ 기본 사용
from itertools import permutations
items = ['a', 'b', 'c']
perm = permutations(items, 2)
print(list(perm))
[('a', 'b'), ('a', 'c'), ('b', 'a'), ('b', 'c'), ('c', 'a'), ('c', 'b')]
- items에서 2개씩 순서 있게 뽑는 모든 경우의 수를 생성한다.
- 결과는 튜플 형태로 반환된다.
2️⃣ 전체 길이의 순열 생성
r 값을 생략하면 len(iterable)을 사용하여 전체 길이의 순열을 생성한다.
perm = permutations(items)
print(list(perm))
출력 결과
[('a', 'b', 'c'), ('a', 'c', 'b'), ('b', 'a', 'c'), ('b', 'c', 'a'), ('c', 'a', 'b'), ('c', 'b', 'a')]
3️⃣ 문자열 순열 생성
문자열에서도 사용할 수 있다. 각 문자 순서가 중요한 모든 경우의 수를 생성한다.
perm = permutations('ABC', 2)
print(list(perm))
출력 결과
[('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'C'), ('C', 'A'), ('C', 'B')]
4️⃣ 중첩 for문으로 출력하기
permutations의 결과를 중첩된 for문으로 처리해 원하는 형태로 출력할 수 있다.
items = [1, 2, 3]
for perm in permutations(items, 2):
print(perm)
출력 결과
(1, 2)
(1, 3)
(2, 1)
(2, 3)
(3, 1)
(3, 2)
요약
- permutations는 순서를 고려하여 특정 길이만큼 요소를 뽑는 모든 순열을 생성한다.
- 결과는 튜플로 반환되며, list()로 변환해 모든 순열을 리스트로 볼 수 있다.
- 순열의 길이 r을 지정할 수 있으며, 생략 시 전체 길이로 순열이 생성된다.
- itertools 모듈에서 가져와야 사용 가능하다.
combinations (조합)
파이썬의 combinations는 순서에 상관없이 주어진 길이만큼 원소를 뽑는 모든 조합을 생성해주는 함수이다. itertools 모듈에 포함되어 있어, 이 모듈을 먼저 임포트해야 한다.
기본 구문
from itertools import combinations
combinations(iterable, r)
- iterable : 조합을 생성할 대상(예: 리스트, 문자열 등).
- r : 조합의 길이 (뽑을 개수).
사용 방법
1️⃣ 기본 사용
from itertools import combinations
items = ['a', 'b', 'c']
combi = combinations(items, 2)
print(list(combi))
출력 결과
[('a', 'b'), ('a', 'c'), ('b', 'c')]
- 'a', 'b', 'c' 중에서 2개씩 조합을 생성한다.
- 결과는 튜플 형태로 반환된다.
2️⃣ 문자열에서 조합 생성
문자열도 iterable이기 때문에, 조합을 구할 수 있다.
combi = combinations('ABCD', 2)
print(list(combi))
출력 결과
[('A', 'B'), ('A', 'C'), ('A', 'D'), ('B', 'C'), ('B', 'D'), ('C', 'D')]
3️⃣ 모든 조합 생성
전체 가능한 조합을 구하려면, 길이 r을 1부터 len(iterable)까지 늘려가면서 구할 수 있다.
items = ['x', 'y', 'z']
all_combinations = [list(combinations(items, r)) for r in range(1, len(items) + 1)]
print(all_combinations)
출력 결과
[[('x',), ('y',), ('z',)], [('x', 'y'), ('x', 'z'), ('y', 'z')], [('x', 'y', 'z')]]
4️⃣ 이중 for문으로 출력하기
combinations를 이중 for문으로 순회하여 원하는 형태로 출력할 수도 있다.
items = [1, 2, 3]
for combi in combinations(items, 2):
print(combi)
출력 결과
(1, 2)
(1, 3)
(2, 3)
요약
- combinations는 순서를 고려하지 않고 특정 길이만큼 요소를 뽑는 모든 조합을 생성한다.
- 결과는 튜플 형태로 반환되며, list()로 변환하면 전체 조합을 리스트로 볼 수 있다.
- 조합의 길이 r을 지정해야 하며, itertools 모듈에서 가져와야 사용 가능하다.
Permutations 와 Combinations 의 차이
permutations와 combinations의 주요 차이는 순서를 고려하는지 여부이다.
- permutations
- 순서를 중요하게 생각한다. 같은 원소라도 순서가 다르면 다른 경우로 간주한다.
- 예를 들어, ('a', 'b')와 ('b', 'a')는 다른 순열로 본다.
- combinations
- 순서를 중요하지 않게 생각한다. 같은 원소가 다른 순서로 배치되더라도 같은 조합으로 간주한다.
- 예를 들어, ('a', 'b')와 ('b', 'a')는 같은 조합으로 취급된다.
예시
- permutations(['a', 'b'], 2) → [('a', 'b'), ('b', 'a')]
- combinations(['a', 'b'], 2) → [('a', 'b')]
📌 정리
permutations는 순서가 중요할 때 사용하고, combinations는 순서가 중요하지 않을 때 사용한다.
'알고리즘' 카테고리의 다른 글
[Algorithm] Two-Pointers(투 포인터) (3) | 2024.11.15 |
---|---|
[파이썬] 이진법, 이진수, 2진수 변환 방법 (0) | 2024.11.15 |
[파이썬] lambda(람다) 함수 (0) | 2024.10.30 |
[파이썬] enumerate() 함수 (0) | 2024.10.29 |
[파이썬] set, 집합 함수 (0) | 2024.10.29 |