2017-08-09 12 views
-2

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) 
+0

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. –

+0

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. –

Antwort

-1

import itertools

i = [[ 'a1', 'a2', 'a3'] [ 'b1', 'b2'] [ 'c1' 'c2',‘ c3' ]]

Druckliste (itertools.product (* i))

Verwandte Themen