2016-10-03 4 views
2

Nach einiger Verwirrung (wahrscheinlich, wenn nicht definitiv durch eine schlechte Frage von meinem Teil verursacht) Ich versuche zu arbeiten, wie man einen Code erreicht, um die folgende Operation durchzuführen, aber n Nummer mal:Wiederholen für i in Liste - n Male

def 1_level: 
    for i in list: 
     for j in i: 
      mylist.append(i) 

def 2_levels: 
    for i in list: 
     for j in i: 
      for k in j: 
       mylist.append(k) 

def 3_levels: 
    for i in list: 
     for j in i: 
      for k in j: 
       for l in k: 
        mylist.append(l) 

def 4_levels: 
    for i in list: 
     for j in i: 
      for k in j: 
       for l in k: 
        for m in l: 
         mylist.apend(m) 

def 5_levels: 
    for i in list: 
     for j in i: 
      for k in j: 
       for l in k: 
        for m in l: 
         for n in m: 
          mylist.append(n) 

Meine Gedanken sind wie folgt:

def prunelist(n,mylist): 
    if n > 0:       # if n has not been reached 
     for i in mylist: 
      templist = []    #create blank list for appended items 
      for j in i: 
       templist.append(j)  #append items one branch down 
      mylist = templist   #overwrite original list 
      n -= 1      #reduce n by 1 
      prunelist(n,mylist)  #perform operation again (assuming n >0) 

    else: 
     return mylist    #when n is exhausted, output list 

outputlist = prunelist(n,mylist)  #perform operation 

(Für eine weitläufige Erklärung finden Sie bearbeiten !!!)

Prost

J-P

+1

Können Sie Eingangs- und Ausgangs Beispiele? –

+0

Bitte teilen Sie Ihre Beispieleingabe und erforderliche Ausgabe –

+1

@poke ich glaube nicht, dass dies ist, was hier gefragt wird. –

Antwort

2

Sie fast da waren mit Ihrer prunelist Funktion gibt es nur ein paar Fragen:

  • Sie nicht eine Liste übergeben, indem Sie einfach tun mylist = templist überschreiben können. Dies ändert die mylist Variable, aber nicht die ursprüngliche Variable. Sie könnten den Inhalt der ursprünglichen Liste hier ersetzen, aber ein besserer Weg wäre, nur die neue Liste (d. H. templist) zurückzugeben. Dies würde auch gut zu dem anderen Rekursionsfall passen, in dem Sie das unmodifizierte mylist zurückgeben.
  • In jeder Iteration durch mylist werfen Sie das Ergebnis der vorherigen Iteration weg. Bewegen Sie den templist = [] Initialisierung außerhalb der Schleife, und die return prunelist(n, templist) sowie

Wenn Sie das tun, Ihre Funktion bereits funktioniert:

def prunelist(n, mylist): 
    if n > 0: 
     templist = [] 
     for i in mylist: 
      for j in i: 
       templist.append(j) 
     return prunelist(n - 1, templist) 
    else: 
     return mylist 
+0

Wie gesagt, ich werde das morgen überprüfen müssen, aber auf den ersten Blick sieht das hervorragend aus. Ich habe großen Glauben. Cheers für die Erklärung der Dinge auch, sehr geschätzt. – Jup

+0

Funktioniert perfekt! Ich habe aber eine Frage ... Wenn templist an die Prunelist-Funktion übergeben wird. Wird ihm dann der Name 'mylist' zugewiesen (aufgrund der in der Definition von prelelist definierten Definition)? – Jup

+0

Ja, für den Ausführungsumfang dieses anderen Funktionsaufrufs hat 'mylist' dann die Wert des äußeren 'templist' Diese Bereiche werden sich jedoch nicht gegenseitig stören. – poke

Verwandte Themen