/ / Encontre todas as combinações diferentes com Python - python

Encontrar todas as diferentes combinações com Python - python

Eu quero criar uma função em python que como entrada leva uma lista com uma quantidade não especificada de seqüências de caracteres cujo comprimento também não é padrão ou o mesmo uns com os outros. A entrada seria assim:

list = ["1234", "4", "97", ... , "542"]

O primeiro elemento desta lista representa todo onúmeros possíveis que poderiam ser o primeiro dígito de um número, o segundo elemento os números possíveis que poderiam ser o segundo dígito e assim por diante. Como saída, quero ter uma lista com todos os números possíveis que poderiam ser gerados dessa maneira. Aqui está um exemplo:

input = ["12", "45", "865"]
output = ["148", "146", "145", "158", "156", "155",
"248", "246", "245", "258", "256", "255"]

Existe um algoritmo para isso? Eu não sou completamente novo em python, mas este problema me deixa perplexo. Obrigado por qualquer ajuda.

Respostas:

4 para resposta № 1
from itertools import product

input = ["12", "45", "865"]

["".join(prod) for prod in product(*input)]

# ["148", "146", "145", "158", "156", "155", "248", "246",
#  "245", "258", "256", "255"]

itertools.product leva um número de iteráveis ​​como parâmetros e produz seu produto cartesiano.
Como seus iteráveis ​​(suas strings) estão em uma lista, usamos a sintaxe * input para descompactar os elementos da lista para separar os parâmetros posicionais.


1 para resposta № 2

Testado com o Python 2.7

Input = ["12", "45", "865"]
out = [[]]

# algo
for liste in Input:
out = [x + [y] for x in out for y in liste]
#print out # un comment to see how algo works

index = 0
while index < len(out):
out[index] = "".join(out[index])
index += 1

print out

# prodcues:
# ["148", "146", "145", "158", "156", "155",
#  "248", "246", "245", "258", "256", "255"]
# The while loop can be reduced to:
# print ["".join(liste) for liste in out]