Python: Найдите все перестановки строки (3 легких способа!)
В этом руководстве вы узнаете, как использовать Python для поиска всех перестановок строки, включая использование itertools
, рекурсии и циклов for
в Python. Вы также узнаете, как найти все комбинации строки, когда допускается замена отдельных букв.
Но что такое перестановка? Перестановка - это различное упорядочивание элемента. Например, строка abc
может быть записана как ['abc', 'acb', 'bac', 'bca', 'cab', 'cba']
.
Содержание
Что такое перестановки строки?
Перестановки строки относятся ко всем различным порядкам, которые может принимать строка. Давайте, например, рассмотрим строку из трех букв: 'abc'. Когда мы находим все перестановки этой строки, мы получаем следующий список: ['abc', 'acb', 'bac', 'bca', 'cab', 'cba']. Здесь мы видим, что у нас есть список, содержащий шесть элементов.
Мы можем фактически вычислить количество перестановок, которое будет иметь строка любой длины, вычислив факториал ее длины. Так, в нашем примере с 'abc' мы вычислим значение 3!, которое фактически равно 3x2x1 = 6.
Теперь, когда у вас есть понимание того, что значит генерировать все комбинации строки в Python, давайте посмотрим, как мы можем легко генерировать различные перестановки строки.
Использование Itertools в Python для поиска всех перестановок строки
Itertools - это фантастический встроенный инструмент Python, который позволяет легко работать с задачами, связанными с итерируемыми объектами. Верите вы или нет, но строки в Python являются итерируемыми объектами! Благодаря этому мы можем легко итерировать по нашим строкам, используя библиотеку itertools
.
Фактически, в библиотеке itertools есть функция под названием permutations. Когда мы передаем в нее итерируемый объект, в данном случае строку, функция возвращает список всех возможных комбинаций.
Давайте рассмотрим наш пример строки и как мы можем использовать библиотеку itertools
для вычисления ее перестановок:
Давайте рассмотрим, что мы здесь сделали:
Импортировали библиотеку
itertools
Загрузили нашу строку и присвоили ее переменной
a_string
Затем использовали функцию
permutations()
для создания объекта itertoolsПреобразовали этот объект в список, который вернул список кортежей, содержащих наши перестановки
Наконец, использовали списковое включение для объединения наших перестановок в отдельные строки
В следующем разделе вы узнаете, как использовать рекурсию для поиска комбинаций строки в Python.
Использование рекурсии в Python для поиска всех перестановок строки
Концепция, которую мы будем использовать в рекурсии для создания перестановок, известна как backtracking
(возврат). Идея заключается в том, что мы возвращаемся назад для каждой возможной комбинации, которая может существовать.
Давайте посмотрим, как этот рекурсивный метод работает для поиска всех комбинаций строки в Python:
Мы видим, что это возвращает то же самое, что и выше. Однако, для начинающих пользователей Python этот метод немного менее интуитивно понятен, поэтому, возможно, использование метода itertools будет предпочтительнее для читаемости. Этот метод, однако, полезен, когда вы по какой-то причине не можете использовать itertools
.
Хотите узнать, как использовать функцию Python zip()
для итерации по двум спискам? Это руководство точно объясняет, что делает функция zip()
и показывает некоторые творческие способы использования функции.
Перестановки с повторениями строки в Python
В приведенных выше примерах мы использовали Python для поиска всех комбинаций строки без повторений. В этом разделе вы узнаете, как использовать Python для получения всех перестановок строки с повторениями.
Это можно легко сделать с помощью цикла for
в Python.
Давайте рассмотрим пример, используя ту же строку, что и раньше, 'abc'
:
В коде выше мы используем цикл for
и списковое включение для возврата всех комбинаций строки Python с повторениями.
Приведенный выше код может быть довольно ресурсоемким. Мы также можем видеть здесь, что у нас гораздо больше комбинаций, когда мы используем повторения, чем если бы мы их не использовали.
Заключение
В этой статье вы узнали, как использовать Python для создания списка всех перестановок строки. Вы узнали, как это делать с помощью популярной библиотеки itertools
, а также с помощью рекурсии. Затем вы узнали, как использовать цикл for
в Python для создания списка всех комбинаций строки, когда разрешены повторения.
Чтобы узнать больше о функции permutation(), ознакомьтесь с официальной документацией.
Last updated