Ich rekursive verwendet, um die Kombination bestimmter Elemente zu erhalten.Python - Liste kann nicht rekursiv aktualisiert werden
I Kombination erhalten, wenn Indexerror auftritt (in Ausnahme: Teil).
Für a = ['a1', 'a2', 'a3'], b = ['b1', 'b2'], c = ['c1', 'c2', 'c3']
ich mögliche Kombinationen erhalten möchten, die
[['a1', 'b1', 'c1'],['a1', 'b1', 'c2'],['a1', 'b1', 'c3'],['a1', 'b2', 'c1'],['a1', 'b2', 'c2'],['a1', 'b2', 'c3'],['a2', 'b1', 'c1'],['a2', 'b1', 'c2'],['a2', 'b1', 'c3'],['a2', 'b2', 'c1'],['a2', 'b2', 'c2'],['a2', 'b2', 'c3'],['a3', 'b1', 'c1'],
['a3', 'b1', 'c2'],['a3', 'b1', 'c3'],['a3', 'b2', 'c1'],['a3', 'b2', 'c2'],['a3', 'b2', 'c3']]
Jedoch sind, ist das Ergebnis nicht, was ich wollen.
[['a3', 'b2', 'c3'], ['a3', 'b2', 'c3'], ['a3', 'b2', 'c3'], ['a3', 'b2', 'c3'], ['a3', 'b2', 'c3'], ['a3', 'b2', 'c3'], ['a3', 'b2', 'c3'], ['a3', 'b2', 'c3'], ['a3', 'b2', 'c3'], ['a3', 'b2', 'c3'], ['a3', 'b2', 'c3'], ['a3', 'b2', 'c3'], ['a3', 'b2', 'c3'], ['a3', 'b2', 'c3'], ['a3', 'b2', 'c3'], ['a3', 'b2', 'c3'], ['a3', 'b2', 'c3'], ['a3', 'b2', 'c3']]
Nur letzte Kombination kommt heraus.
Hier ist mein Code .. Ich würde Ihnen danken, um mir richtigen Weg zu zeigen.
a = ['a1', 'a2', 'a3']
b = ['b1', 'b2']
c = ['c1', 'c2', 'c3']
def loop(lst, combi, combi_set, index=0):
try:
for a in lst[index]:
if len(combi) == len(lst):
for n, i in enumerate(combi):
if i.startswith(a[0]):
combi[n] = a
else:
combi.append(a)
loop(lst, combi, combi_set, index=index + 1)
except IndexError:
print(combi)
combi_set.append(combi)
return
set = []
loop([a, b, c], [], set, 0)
print(set)
Ist das eine spezifische excersise oder brauchen Sie nur die karthesischen Produkt? Im letzteren Fall benutzen Sie 'itertools.product (a, b, c)', erfinden Sie dieses Rad nicht neu. –
Sie verwenden dieselbe Liste immer wieder und wieder und wieder. Wenn Sie diese Liste an "combi_set" anhängen, erhalten Sie eine Liste mit Verweisen auf ** eine Liste **. Erstellen Sie stattdessen Kopien. –