>  기사  >  백엔드 개발  >  특히 중복을 피해야 하는 경우 Python에서 문자열의 모든 순열을 어떻게 효율적으로 찾을 수 있습니까?

특히 중복을 피해야 하는 경우 Python에서 문자열의 모든 순열을 어떻게 효율적으로 찾을 수 있습니까?

Linda Hamilton
Linda Hamilton원래의
2024-10-27 08:16:031038검색

How can I efficiently find all permutations of a string in Python, especially if I need to avoid duplicates?

Python에서 주어진 문자열의 모든 순열 찾기 [중복]

Python에서는 주어진 문자열의 가능한 모든 순열을 찾는 것이 어렵습니다. . 한 가지 접근 방식은 문자 목록을 반복하여 쌍을 무작위로 바꾸어 새 문자열을 생성하는 것입니다. 그러나 이 접근 방식에는 한계가 있습니다.

itertools 모듈을 사용한 최적의 솔루션

보다 효율적인 솔루션은 permutations() 메서드를 제공하는 itertools 모듈에 있습니다. 이 메서드는 iterable에 있는 요소의 연속 순열을 반환합니다. 인수가 지정되지 않으면 이 방법은 기본적으로 사전순으로 모든 전체 길이 순열을 생성합니다.

<code class="python">import itertools

x = 'stack'
perms = [''.join(p) for p in permutations(x)]</code>

이 코드는 다음과 같이 '스택'에 있는 문자의 가능한 모든 순열을 포함하는 문자열 목록을 생성합니다. 다음:

perms = ['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']

중복 항목이 발견되면 세트를 사용하여 제거해 보세요.

<code class="python">x = 'stack'
perms = set([''.join(p) for p in permutations(x)])</code>

위 내용은 특히 중복을 피해야 하는 경우 Python에서 문자열의 모든 순열을 어떻게 효율적으로 찾을 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.