Переделать назначение кода python
есть код, выполняющий перебор комбинаций букв из массива (см. код) Работает правильно и алгоритм верен, мне нужно что бы данный код выполнял тоже самое только на основе слов вместо букв и выводил в строку комбинации слов через запятую:
Пример: Кошка собака дом => Кошка собака дом, кошка дом собака, кошка дом, кошка собака, кошка, собака кошка, собака дом, собака, собака дом кошка, собака кошка дом, дом, дом собака, дом кошка, дом собака кошка, дом кошка собака.
def gencombs(comb, lst, idx):
if idx >= len(lst):
print(comb)
else:
for i in range(len(comb),-1, -1):
gencombs(comb[:i] + [lst[idx]] + comb[i:], lst, idx + 1)
gencombs(comb, lst, idx + 1)
gencombs([],"abc", 0)
Ответы (2 шт):
Попробуй лучше библиотеку itertools, там есть метод: permutations, который принимает в себя iterable (например массив) и количество перестановок
Пример:
from itertools import *
a = ['Cat', 'Dog', 'House']
a = permutations(a)
for i in a:
print(''.join(list(i)), end=', ')
Выведет:
CatDogHouse, CatHouseDog, DogCatHouse, DogHouseCat, HouseCatDog, HouseDogCat
Ну там же и надо было спросить. Код перебирает элементы iterable объектов (т.е. таких, из которых можно взять элементы по одному - по индексу или другими средствами) - в примере строка, но это может быть и список (строк или чего угодно)
gencombs([], ["Кошка", "собака", "дом"], 0)