Как составить из букв все возможные комбинации, но не все буквы нужно использовать? - PullRequest
0 голосов
/ 09 мая 2020

Я делаю проект на Python, и он включает в себя функцию, которая возвращает все возможные комбинации из букв, заданных в качестве параметра, но не все буквы должны использоваться. Это моя текущая функция:

from itertools import product
def algorithm(letters):
    possible = [''.join(combination) for combination in product(letters, repeat=len(letters))]
    return possible
print(algorithm(['a','b','c','d','e']))

Но она возвращает только комбинации, в которых есть все буквы, указанные в них. Он не возвращает такие комбинации, как:

abc
cba
de
ad

et c. Кто-нибудь может мне помочь?

Ответы [ 2 ]

1 голос
/ 09 мая 2020

С минимально возможными изменениями в вашем коде должно работать следующее:

def algorithm(letters):
    allPoss = list()
    for i in range(1, len(letters)+1):
        possible = [''.join(combination) for combination in product(letters, repeat= i)]
        allPoss.append(possible)
    return allPoss
print(algorithm(['a','b','c','d','e']))
1 голос
/ 09 мая 2020

Вы можете сделать следующее:

import itertools

def generate(vals):
    return ("".join(x) for x in itertools.chain.from_iterable(itertools.permutations(vals,i+1) for i in range(0,len(vals))))

print(list(generate("".join(['a','b','c','d','e']))))

Это сгенерирует любую комбинацию, начиная с длины 1-5

...