«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как сгенерировать все возможные перестановки заданной строки в Python с помощью модуля itertools и как справиться с потенциальными дубликатами?

Как сгенерировать все возможные перестановки заданной строки в Python с помощью модуля itertools и как справиться с потенциальными дубликатами?

Опубликовано 3 ноября 2024 г.
Просматривать:914

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

Задача генерации всех возможных перестановок заданной входной строки имеет простое решение в Python. Чтобы приступить к решению этой задачи, мы сначала рассмотрим входную строку, которую попытаемся изменить порядок. Для иллюстрации возьмем в качестве примера строку stack:

x = 'stack'

Наша цель — создать перестановки строки stack путем перестановки ее символов.

l=['stack','satck','sackt'.......]

Традиционно для решения этой задачи можно рассмотреть итеративные подходы, включающие случайный выбор и перестановка пар символов для создания новых перестановок. Однако мы можем упростить нашу задачу, используя метод permutations(), предоставляемый модулем itertools. Как следует из документации:

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
лен(пермский) #720 len(set(perms)) # 360

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3