2017-02-27 3 views
0

Ich verstehe, was dieser Fehler bedeutet, aber kann jemand erklären, was mache ich falsch mit diesem bestimmten Code? Im Grunde ist path = [A, B, C, D] und ich erschaffe nur [4] [4] (final) 2-dimensionale Arrays, die die benachbarten Indizes vertauschen. Das Tauschen beginnt mit dem letzten Element und dem Element davor und geht mit dem Schleifenanfang an den Anfang der Liste. Also sollte am Ende ich [[A, B, D, C] [A, C, B, D], [B, A, C, D], [D, B, C, A]]Listenindex außerhalb des Bereichs, den ich nicht sehen kann

erhalten
t = -1 
    s = 1 
    y = [] 
    final = [] 
    path = self.path #path = [A,B,C,D] 
    for x in path: 
     y.append(path) 
     if s < 4:  #Just ensuring to not get out of range 
      y[-s],y[-s-1] = y[-s-1],y[-s] 
     else: 
      y[-1],y[0] = y[0],y[-1] 
     final.append(y) 
     y = []   # So I won't create multi-dimensional list 

Fehler: Listenindex außerhalb des zulässigen Bereichs

+0

Wenn 's 3' =' -s-1 'ist -4. 'y [-4]' ist außerhalb der Grenzen. – Maroun

+0

Es ist schon innerhalb der ersten Iteration, dass 'y [-s-1]' zu 'y [-2] 'auswertet, während' len (y) == 1' ist, so dass der Index außerhalb des Bereichs liegt. –

+0

't' wird nie verwendet,' s' ist immer 1, aber es gibt ein 'if s <4',' y' ist leer, dann wird 1 Element hinzugefügt, dann versucht man, 2 seiner Elemente zu tauschen, wenn es ist hat nur 1 ... Ich empfehle eine vollständige Neufassung von diesem, "unnötig kompliziert" kaum anfängt, es zu beschreiben. –

Antwort

1

Hier ist ein Stück Code, das funktioniert und ist lesbar:

path= ['A','B','C','D'] 

final= [] 
for index in range(len(path)): 
    row= path[:] # copy the original list 
    row[index-1],row[index]= row[index],row[index-1] # swap 2 elements 
    final.insert(0, row) # insert at the start so the order is as expected 

print(final) 
+0

Danke, arbeitete wie ein Charme. Ich habe komplett vergessen, dass diese Reihenfolge egal ist, also ist es ein sehr schönes Stück Code, das du geschrieben hast, obwohl es einfach ist :) –

0

Denn hier Ihre y wird [[A, B, C, D]] nicht [A, B, C, D]. Es hat also nur ein Element.

Verwandte Themen