"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Python에서 `itertools` 모듈을 사용하여 주어진 문자열의 가능한 모든 순열을 어떻게 생성하고 잠재적인 중복을 어떻게 처리합니까?

Python에서 `itertools` 모듈을 사용하여 주어진 문자열의 가능한 모든 순열을 어떻게 생성하고 잠재적인 중복을 어떻게 처리합니까?

2024-11-03에 게시됨
검색:189

How do you generate all possible permutations of a given string in Python using the `itertools` module, and how do you handle potential duplicates?

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.

시나리오에서 이 방법을 사용합니다. 다음 고려 사항을 준수해야 합니다.

  1. r이 생략되거나 None으로 설정된 경우 기본값은 길이입니다. 가능한 모든 순열의 생성을 보장합니다.
  2. 순열은 사전식 순서로 방출됩니다. 따라서 입력 반복 가능 항목이 정렬되면 순열 튜플이 정렬된 방식으로 생성됩니다.

따라서 원하는 순열을 얻기 위해 다음 접근 방식을 사용합니다.

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