Рубрики
Без рубрики

Перестановки и комбинации в Python

Перестановки и комбинации набора элементов представляют собой различные расположения элементов набора. Комбинация – это совокупность элементов

Автор оригинала: Pankaj Kumar.

Перестановки и комбинации набора элементов представляют собой различные расположения элементов набора.

  • Комбинация – это набор элементов, порядок которых не имеет значения
  • Перестановка – это расположение множества, в котором порядок имеет значение.

Давайте рассмотрим набор как:

{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]

Теперь, чтобы получить список перестановок, давайте воспользуемся методом перестановок ().

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)

Перестановки строки

Далее мы узнаем, как получить перестановки символов в строке.

Мы будем использовать метод перестановок (), но на этот раз мы передадим строку в качестве аргумента.

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, чтобы получить комбинации набора.

При вызове combinations() нам нужно передать два аргумента: набор для поиска комбинаций и число, обозначающее длину каждой комбинации.

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 есть еще один метод, называемый combinations_with_replacement(). Этот метод также учитывает комбинацию числа с самим собой.

Давайте посмотрим, как это работает.

Для числового набора

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, для поиска перестановок и комбинаций.