Python에서 주어진 문자열의 가능한 모든 순열 찾기
주어진 입력 문자열의 가능한 모든 순열을 생성하는 작업은 간단한 솔루션을 제공합니다. 파이썬에서. 이 작업을 시작하기 위해 먼저 입력 문자열을 고려하고 이를 재정렬하려고 시도합니다. 설명을 위해 문자열 'stack'을 예로 들어보겠습니다.
x = 'stack'
우리의 목표는 'stack'의 순열을 재배열하여 만드는 것입니다. 문자.
l=['stack','satck','sackt'.......]
전통적으로는 이 문제를 해결하기 위해 반복적인 접근 방식을 고려할 수 있습니다. , 새로운 순열을 생성하기 위해 문자 쌍을 무작위로 선택하고 전치하는 작업이 포함됩니다. 그러나 itertools 모듈에서 제공하는 permutations() 메서드를 활용하면 작업을 단순화할 수 있습니다. 문서에서 알 수 있듯이:
itertools.permutations(iterable[, r])
Return successive r length permutations of elements in the iterable.
시나리오에서 이 방법을 사용합니다. 다음 고려 사항을 준수해야 합니다.
따라서 원하는 순열을 얻기 위해 다음 접근 방식을 사용합니다.
from itertools import permutations
perms = [''.join(p) for p in permutations('stack')]
이 접근 방식은 다음 순열을 생성합니다:
['stack', 'stakc', 'stcak', 'stcka', 'stkac', 'stkca', 'satck', 'satkc', 'sactk', 'sackt', 'saktc', 'sakct', 'sctak', 'sctka', 'scatk', 'scakt', 'sckta', 'sckat', 'sktac', 'sktca', 'skatc', 'skact', 'skcta', 'skcat', 'tsack', 'tsakc', 'tscak', 'tscka', 'tskac', 'tskca', 'tasck', 'taskc', 'tacsk', 'tacks', 'taksc', 'takcs', 'tcsak', 'tcska', 'tcask', 'tcaks', 'tcksa', 'tckas', 'tksac', 'tksca', 'tkasc', 'tkacs', 'tkcsa', 'tkcas', 'astck', 'astkc', 'asctk', 'asckt', 'asktc', 'askct', 'atsck', 'atskc', 'atcsk', 'atcks', 'atksc', 'atkcs', 'acstk', 'acskt', 'actsk', 'actks', 'ackst', 'ackts', 'akstc', 'aksct', 'aktsc', 'aktcs', 'akcst', 'akcts', 'cstak', 'cstka', 'csatk', 'csakt', 'cskta', 'cskat', 'ctsak', 'ctska', 'ctask', 'ctaks', 'ctksa', 'ctkas', 'castk', 'caskt', 'catsk', 'catks', 'cakst', 'cakts', 'cksta', 'cksat', 'cktsa', 'cktas', 'ckast', 'ckats', 'kstac', 'kstca', 'ksatc', 'ksact', 'kscta', 'kscat', 'ktsac', 'ktsca', 'ktasc', 'ktacs', 'ktcsa', 'ktcas', 'kastc', 'kasct', 'katsc', 'katcs', 'kacst', 'kacts', 'kcsta', 'kcsat', 'kctsa', 'kctas', 'kcast', 'kcats']
순열에서 중복이 발견되면 다음과 같이 중복을 방지하는 형식으로 데이터를 재구성하여 처리할 수 있습니다.
perms = [''.join(p) for p in permutations('stacks')]
len(perms) # 720
len(set(perms)) # 360
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3