Перестановки и комбинации в Python
Перестановки и комбинации набора элементов — это различные расположения элементов набора.
- Комбинация – это набор элементов, порядок которых не имеет значения.
- Перестановка – это расположение набора, в котором порядок имеет значение.
Рассмотрим множество как:
{A, B, C}
Перестановки вышеуказанного набора следующие:
('A', 'B', 'C')
('A', 'C', 'B')
('B', 'A', 'C')
('B', 'C', 'A')
('C', 'A', 'B')
('C', 'B', 'A')
Комбинации вышеуказанного набора, когда два элемента взяты вместе, таковы:
('A', 'B')
('A', 'C')
('B', 'C')
В этом уроке мы узнаем, как получить перестановки и комбинации группы элементов в Python. Мы рассмотрим наборы символов и чисел.
Мы будем использовать методы комбинации() и перестановки() в модуле itertools Python.
Давайте начнем.
Перестановки числовых данных
Чтобы использовать метод permutations() в модуле itertools, нам сначала нужно импортировать модуль.
import itertools
Теперь давайте определим набор чисел.
val = [1, 2, 3, 4]
Теперь также получим список перестановок, давайте воспользуемся методом permutations().
perm_set = itertools.permutations(val)
Строка кода выше дает объект itertools . Чтобы напечатать различные перестановки, мы будем перебирать этот объект.
for i in perm_set:
print(i)
Мы получаем вывод как:
1 2 3 4
1 2 4 3
1 3 2 4
1 3 4 2
1 4 2 3
1 4 3 2
2 1 3 4
2 1 4 3
2 3 1 4
2 3 4 1
2 4 1 3
2 4 3 1
3 1 2 4
3 1 4 2
3 2 1 4
3 2 4 1
3 4 1 2
3 4 2 1
4 1 2 3
4 1 3 2
4 2 1 3
4 2 3 1
4 3 1 2
4 3 2 1
Полный код для этого раздела приведен ниже:
import itertools
val = [1, 2, 3, 4]
perm_set = itertools.permutations(val)
for i in perm_set:
print(i)
Перестановки строки
Далее мы узнаем, как получить перестановки символов в строке.
Мы будем использовать метод permutations(), но на этот раз мы будем передавать строку в качестве аргумента.
import itertools
s = "ABC"
perm_set = itertools.permutations(s)
for val in perm_set:
print(val)
Выход :
('A', 'B', 'C')
('A', 'C', 'B')
('B', 'A', 'C')
('B', 'C', 'A')
('C', 'A', 'B')
('C', 'B', 'A')
Перестановки фиксированной длины
Мы можем найти перестановки набора, где мы берем только определенное количество элементов в каждой перестановке. Это похоже на nPr в области математики.
Код для поиска перестановок фиксированной длины приведен ниже:
import itertools
val = [1, 2, 3, 4]
perm_set = itertools.permutations(val,2)
for i in perm_set:
print(i)
Выход :
(1, 2)
(1, 3)
(1, 4)
(2, 1)
(2, 3)
(2, 4)
(3, 1)
(3, 2)
(3, 4)
(4, 1)
(4, 2)
(4, 3)
Комбинации числовых данных
Так же, как метод перестановки(), мы можем использовать комбинации(), также под itertools, чтобы получить комбинации набора.
При вызове комбинации() нам нужно передать два аргумента: набор для поиска комбинаций и число, обозначающее длину каждой комбинации.
import itertools
val = [1, 2, 3, 4]
com_set = itertools.combinations(val, 2)
for i in com_set:
print(i)
Выход :
(1, 2)
(1, 3)
(1, 4)
(2, 3)
(2, 4)
(3, 4)
Комбинации строки
Мы также можем получить комбинации строк. Чтобы получить комбинации строки, используйте следующий фрагмент кода:
import itertools
s = "ABC"
com_set = itertools.combinations(s, 2)
for i in com_set:
print(i)
Выход :
('A', 'B')
('A', 'C')
('B', 'C')
Комбинации с заменами
В модуле itertools есть еще один метод, который называется комбинациями_с_заменой(). Этот метод также учитывает комбинацию числа с самим собой.
Посмотрим, как это работает.
Для числового набора
import itertools
val = [1, 2, 3, 4]
com_set = itertools.combinations_with_replacement(val, 2)
for i in com_set:
print(i)
Выход :
(1, 1)
(1, 2)
(1, 3)
(1, 4)
(2, 2)
(2, 3)
(2, 4)
(3, 3)
(3, 4)
(4, 4)
Вы можете увидеть разницу в выводе выше и выводе для работы обычной комбинации. Здесь у нас есть такие комбинации, как (1,1) и (2,2), которых нет в обычных операциях комбинаций.
Для строки
import itertools
val = "ABCD"
com_set = itertools.combinations_with_replacement(val, 2)
for i in com_set:
print(i)
Выход :
('A', 'A')
('A', 'B')
('A', 'C')
('A', 'D')
('B', 'B')
('B', 'C')
('B', 'D')
('C', 'C')
('C', 'D')
('D', 'D')
Заключение
Этот урок был посвящен поиску перестановок и комбинаций набора в python. Мы использовали модуль itertools, доступный в python, для поиска перестановок и комбинаций.