Python: Комбинации списка (Получить все комбинации списка)
В этом учебнике вы узнаете, как использовать Python для получения всех комбинаций списка. В частности, вы узнаете, как использовать метод itertool.combinations
для генерации списка всех комбинаций значений в списке.
Оглавление
Что значит получить все комбинации списка?
В вашем путешествии по Python вы можете столкнуться с необходимостью получить все комбинации элементов списка. Но что это значит?
Предположим, у вас есть список, который выглядит так: ['a', 'b', 'c']
.
Когда вы создаете список всех возможных комбинаций, вы получите список, который выглядит так: [(), ('a',), ('b',), ('c',), ('a', 'b'), ('a', 'c'), ('b', 'c'), ('a', 'b', 'c')]
. Здесь мы получаем список кортежей, содержащих все возможные комбинации без замены.
Теперь, когда вы знаете, что значит получить список всех возможных комбинаций списка в Python, давайте посмотрим, как это можно сделать в Python!
Как использовать Itertools
для получения всех комбинаций списка в Python
Itertools
для получения всех комбинаций списка в PythonPython поставляется с встроенной полезной библиотекой под названием itertools
, которая предоставляет полезные функции для работы с итерируемыми объектами. Одной из многих функций, которую она предоставляет, является функция combinations()
. Как следует из названия, она предоставляет способы генерации комбинаций списков.
Давайте посмотрим, как работает функция combinations()
:
iterable
относится к итерируемому объекту, для которого вы хотите найти комбинации, r
относится к длине комбинаций, которые вы хотите создать
Теперь, когда вы знаете, как работает функция combinations()
, давайте посмотрим, как мы можем сгенерировать все возможные комбинации элементов списка Python:
Разберем, что мы сделали:
Мы импортируем функцию combinations из itertools
Мы создаем пример списка и пустой список для хранения наших данных
Затем мы создаем цикл for, чтобы пройти по всем возможным комбинациям длин. Чтобы сделать это динамическим, мы используем функцию range(), так как мы можем не знать, насколько длинным будет наш список в любой момент времени.
Затем мы создаем список из объекта combinations, который возвращается при передаче нашего примерного списка и параметра n
Мы видим, что наш список включает также пустую комбинацию. Если мы хотим опустить это, мы можем изменить наш цикл for на range(1, len(sample_list)+1), чтобы иметь минимальное количество элементов в нашей комбинации.
В следующем разделе вы узнаете, как получить все комбинации только уникальных значений в списке.
Как получить все комбинации уникальных значений списка в Python
В этом разделе вы узнаете, как получить все комбинации только уникальных значений списка в Python. Поскольку списки Python могут содержать дублирующиеся значения, нам нужно будет понять, как это сделать.
Предположим, у нас есть список, который выглядит так: ['a', 'b', 'c', 'c']
. Вместо того чтобы включать дублирующиеся комбинации c
в наш окончательный список, нам сначала нужно будет удалить дубликаты из нашего списка.
Давайте посмотрим, как это можно сделать в Python:
Это следует той же логике, что и пример выше. Единственное отличие в том, что мы сначала создали набор из нашего списка. Наборы — это уникальная структура данных в Python, которая требует, чтобы каждый элемент был уникальным. Поэтому это полезный способ дедупликации нашего списка.
Затем мы итерируем по длине набора и самому набору, чтобы создать все возможные комбинации.
Как получить все комбинации с заменой списка в Python
В этом последнем разделе вы узнаете, как получить все комбинации списка в Python с заменами. Это означает, что один элемент имеет потенциал быть выбран снова.
Давайте посмотрим, как это можно сделать в Python, используя itertools и функцию combinations_with_replacement
. Функция делает именно то, что описано: она получает комбинации с заменами.
Мы видим здесь, что каждый элемент имеет потенциал быть включен один, два или три раза в список из трех элементов.
Заключение
В этой статье вы узнали, как получить все комбинации списка в Python. Вы узнали, как это сделать с помощью функции itertools.combinations и функции itertools.combinations_with_replacement
. Эти функции позволяют передавать список и получать комбинации без и с заменами, соответственно.
Чтобы узнать больше о функции itertools.combinations
, ознакомьтесь с официальной документацией здесь.
Last updated