기본 사용법
from itertools import permutations
문법
permutations(iterable, r)
- iterable: 순열을 만들 데이터(문자열, 리스트, 튜플 등).
- r: 순열의 길이. 생략 시, 기본값은 len(iterable).
반환 값
- 각 순열을 튜플로 반환하는 이터레이터(iterator).
numbers는 문자열일 때의 동작
예제:
from itertools import permutations
numbers = "17"
# 길이 1 순열
print(list(permutations(numbers, 1)))
# 길이 2 순열
print(list(permutations(numbers, 2)))
출력:
[('1',), ('7',)] # 길이 1의 순열
[('1', '7'), ('7', '1')] # 길이 2의 순열
- numbers는 문자열이지만, 문자열도 iterable로 처리됩니다.
- "17"은 ['1', '7']처럼 각 문자로 나뉘어 순열을 생성합니다.
- 결과는 튜플 형태로 반환됩니다:
- 길이 1인 순열: ('1',), ('7',)
- 길이 2인 순열: ('1', '7'), ('7', '1')
solution 함수 내에서의 동작
코드:
for i in range(1, len(numbers) + 1):
perms = permutations(numbers, i)
for p in perms:
num = int("".join(p)) # 튜플을 문자열로 변환 후 정수로 변환
all_numbers.add(num)
동작:
- permutations(numbers, i):
- 문자열 numbers에서 길이 i의 순열 생성.
- 내부 순환:
- 각 순열(p)은 튜플 형태로 반환되므로, 이를 "".join(p)를 통해 문자열로 변환.
- 문자열을 int()로 변환하여 정수 형태로 처리.
예제 실행:
numbers = "17"
for i in range(1, len(numbers) + 1): # i = 1, 2
perms = permutations(numbers, i)
for p in perms:
print(p, int("".join(p))) # 튜플과 숫자 변환 결과 출력
출력:
('1',) 1
('7',) 7
('1', '7') 17
('7', '1') 71
문자열과 숫자 변환 요약
- numbers는 문자열로 처리되며 각 문자는 독립적인 요소로 순열 생성.
- 순열 결과(p)는 튜플로 반환.
- "".join(p)를 통해 튜플을 문자열로 변환.
- int()를 사용하여 문자열을 정수로 변환.
추가 예제
numbers = "012"인 경우:
numbers = "012"
all_perms = set()
for i in range(1, len(numbers) + 1): # i = 1, 2, 3
perms = permutations(numbers, i)
for p in perms:
num = int("".join(p))
all_perms.add(num)
print(all_perms)
출력:
{0, 1, 2, 10, 12, 21, 102, 120, 201, 210}