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 № 1from 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]