본문 바로가기
Programming/Python

[Python] permutations 사용법

by RuntimeSimple 2025. 3. 2.

기본 사용법

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의 순열
  1. numbers는 문자열이지만, 문자열도 iterable로 처리됩니다.
    •   "17"은 ['1', '7']처럼 각 문자로 나뉘어 순열을 생성합니다.
  2. 결과는 튜플 형태로 반환됩니다:
    •   길이 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)

동작:

  1. permutations(numbers, i):
    •   문자열 numbers에서 길이 i의 순열 생성.
  2. 내부 순환:
    •   각 순열(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

문자열과 숫자 변환 요약

  1. numbers는 문자열로 처리되며 각 문자는 독립적인 요소로 순열 생성.
  2. 순열 결과(p)는 튜플로 반환.
  3. "".join(p)를 통해 튜플을 문자열로 변환.
  4. 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}