вычислить все перестановки, включая все вложенные списки

#python #python-3.x #statistics #permutation

#python #python-3.x #Статистика #перестановка

Вопрос:

Если у меня есть список, например:

 my_list = [a,b,c,d]
  

Как я могу вычислить все перестановки, включая перестановки всех подгрупп. Частичный результат для этого примера будет:

 permutations = [a,b,c,d,ab,ba,ac,ca,...,abc,acb,abd,...,abcd,abdc,acdb,...]
  

Ответ №1:

Вы можете выполнить итерацию размера в диапазоне от 1 до длины my_list и использовать itertools.permutations для получения всех перестановок для данного размера:

 from itertools import permutations
my_list = ['a','b','c','d']
[''.join(p) for i in range(1, len(my_list)   1) for p in permutations(my_list, i)]
  

Это возвращает:

 ['a', 'b', 'c', 'd', 'ab', 'ac', 'ad', 'ba', 'bc', 'bd', 'ca', 'cb', 'cd', 'da', 'db', 'dc', 'abc', 'abd', 'acb', 'acd', 'adb', 'adc', 'bac', 'bad', 'bca', 'bcd', 'bda', 'bdc', 'cab', 'cad', 'cba', 'cbd', 'cda', 'cdb', 'dab', 'dac', 'dba', 'dbc', 'dca', 'dcb', 'abcd', 'abdc', 'acbd', 'acdb', 'adbc', 'adcb', 'bacd', 'badc', 'bcad', 'bcda', 'bdac', 'bdca', 'cabd', 'cadb', 'cbad', 'cbda', 'cdab', 'cdba', 'dabc', 'dacb', 'dbac', 'dbca', 'dcab', 'dcba']
  

Ответ №2:

С помощью функции product() библиотеки itertools вы можете сгенерировать все возможные строки в заданном диапазоне и с заданными элементами:

 import itertools

list = ["a", "b", "c", "d"]

for i in itertools.product(list, repeat=4):
    print("".join(x for x in i)
  

Код выводит все строки длиной в 4 символа, которые могут быть составлены из букв a-d.