문자열 s와 숫자 r이 있다고 가정합니다. s에 있는 r개의 문자에 대한 모든 순열을 표시해야 합니다. 모든 순열을 가져오는 permutations() 함수가 있습니다. 이 함수는 itertools 라이브러리 안에 있습니다.
따라서 입력이 s ="HELLO" r =3과 같으면 출력은
>['HEL', 'HEL', 'HEO', 'HLE', 'HLL', 'HLO', 'HLE', 'HLL', 'HLO', 'HOE', 'HOL', 'HOL', 'EHL', 'EHL', 'EHO', 'ELH', 'ELL', 'ELO', 'ELH', 'ELL','ELO', 'EOH', 'EOL', 'EOL', 'LHE', 'LHL', 'LHO', 'LEH', 'LEL', 'LEO', 'LLH', 'LLE', 'LLO', 'LOH', 'LOE', 'LOL', 'LHE', 'LHL', 'LHO', 'LEH', 'LEL', 'LEO', 'LLH', 'LLE', 'LLO', 'LOH', 'LOE', 'LOL', 'OHE', 'OHL', 'OHL', 'OEH', 'OEL', 'OEL', 'OLH', 'OLE', 'OLL', 'OLH', 'OLE', 'OLL']
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- vals:=s에서 r 크기의 모든 순열이 있는 목록
- res:=새 목록
- vals의 각 x에 대해 다음을 수행합니다.
- 문자열 x의 목록을 문자열로 변환하고 res에 삽입
- 반환 결과
예시
더 나은 이해를 위해 다음 구현을 살펴보겠습니다.
from itertools import permutations def solve(s, r): vals=list(permutations(s,r)) res=[] for x in vals: res.append(''.join(x)) return res s = "HELLO" r = 3 print(solve(s, r))
입력
"HELLO", 2
출력
['HEL', 'HEL', 'HEO', 'HLE', 'HLL', 'HLO', 'HLE', 'HLL', 'HLO', 'HOE', 'HOL', 'HOL', 'EHL', 'EHL', 'EHO', 'ELH', 'ELL', 'ELO', 'ELH', 'ELL', 'ELO', 'EOH', 'EOL', 'EOL', 'LHE', 'LHL', 'LHO', 'LEH', 'LEL', 'LEO', 'LLH', 'LLE', 'LLO', 'LOH', 'LOE', 'LOL', 'LHE', 'LHL', 'LHO', 'LEH', 'LEL', 'LEO', 'LLH', 'LLE', 'LLO', 'LOH', 'LOE', 'LOL', 'OHE', 'OHL', 'OHL', 'OEH', 'OEL', 'OEL', 'OLH', 'OLE', 'OLL', 'OLH', 'OLE', 'OLL']