Python에서 리스트의 모든 순열 생성하기
Python에서 리스트의 모든 순열(permutation)을 구하려면 표준 라이브러리인 itertools 모듈의 permutations() 함수를 사용하면 됩니다. 이 함수는 입력된 iterable의 요소들로 만들 수 있는 가능한 모든 순서 조합을 튜플(tuple) 형태로 반환합니다.
기본 사용 예제
다음과 같이 permutations() 함수를 호출한 뒤, 결과를 list()로 감싸면 전체 순열을 리스트 형태로 얻을 수 있습니다.
import itertools perms = list(itertools.permutations([1, 2, 3])) print(perms)
실행 결과
위 코드를 실행하면 다음과 같은 출력이 나타납니다.
[(1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1)]
알아두면 좋은 점
permutations()는 각 순열을 튜플로 반환합니다. 만약 리스트 형태가 필요하다면 다음과 같이 변환할 수 있습니다.
import itertools perms = [list(p) for p in itertools.permutations([1, 2, 3])] print(perms)
또한 두 번째 인자에 길이 r을 지정하면 부분 순열만 생성할 수도 있습니다.
import itertools print(list(itertools.permutations([1, 2, 3], 2))) # [(1, 2), (1, 3), (2, 1), (2, 3), (3, 1), (3, 2)]
참고로 n개의 원소를 가진 리스트의 전체 순열 개수는 n!이므로, 원소 수가 많아질수록 결과의 크기가 기하급수적으로 증가한다는 점을 유의해야 합니다.