2016-03-20 10 views
1

Ich versuche, die Reihenfolge einer Liste umzukehren, indem ich drei Fehler in dieser Funktion finde. Diese Funktion soll die ersten und letzten Elemente einer Liste, die zweiten und vorletzten Elemente usw. umkehren. Ich glaube, ich habe zwei gefunden, habe aber Probleme, die Zeile list[j] = y zu fixieren.Eine Liste mit Swap-Enden umkehren

def reverse(list): 
    """Reverses elements of a list.""" 
    for i in range(len(list)): 
     j = len(list) - i 
     x = list[i] 
     y = list[j-1] 
     list[i] = x 
     list[j] = y 

l = ['a', 'b', 'c', 'd', 'e'] 
reverse(l) 
print(l) 
+0

Verstehen Sie den Code? Versuche zu sehen, welche zwei Elemente du austauschst ... dann wird es offensichtlich. Beachten Sie auch, wie oft Sie jedes Element austauschen (die alten Laurel und Hardy Komödien könnten helfen, dieses zu finden). – Amadan

+1

Was ist los mit 'mylist [:: - 1]'? – Evert

+3

@Evert: Ich nehme an, es ist Debugging Hausaufgaben. Es geht nicht darum, eine Listenumkehr zu schreiben, sondern um eine fehlerhafte Logik zu finden. – Amadan

Antwort

-1

Sie haben ein paar Probleme. Ihr erstes Problem ist, dass Sie list[j] = y anstelle von list[j-1] = x verwenden. Sie haben y korrekt mit j-1 definiert, aber Sie sollten list[j-1] zu dem anderen, x ändern. Ein weiteres Problem ist, dass Sie vom Anfang der Liste bis zum Ende gehen. Sobald Sie mehr als die Hälfte der Liste erreicht haben, machen Sie Ihre Arbeit zunichte. Sie müssen auch nicht len(list)-i verwenden, weil Sie einfach -i verwenden können. Hier ist der aktualisierte Code:

def reverse(seq): 
    """Reverses elements of a list.""" 
    for i in range(len(seq)//2): 
     x = seq[i] 
     y = seq[-i-1] 
     seq[i] = y 
     seq[-i-1] = x 

l = ['a', 'b', 'c', 'd', 'e'] 
reverse(l) 
print(l) 

Ausgang:

['e', 'd', 'c', 'b', 'a'] 

Sie brauchen noch nicht einmal x und y zu definieren. Stattdessen tun Sie dies:

def reverse(seq): 
    """Reverses elements of a list.""" 
    for i in range(len(list)//2): 
     seq[i], seq[-i-1] = seq[-i-1], seq[i] 

Ich änderte auch Ihre Benennung. Es gibt wahrscheinlich einen besseren Namen als seq, aber list ist inakzeptabel, weil es mit dem eingebauten Typ kollidiert.

+0

Verwenden Sie keine Liste, es ist eine integrierte. –

+0

@NamitSingal: Du hast absolut Recht. Ich habe vergessen, das zu ändern, aber es hat sich jetzt geändert. – zondo

+2

@NamitSingal: Pedantic: Ein eingebautes, aber kein Schlüsselwort.Wenn es ein Schlüsselwort wäre, könnten Sie es nicht benutzen. – ShadowRanger

-1

Mit diesem Code:

l = ['a', 'b', 'c', 'd', 'e'] 
l=l[::-1] 
print(l) 

, warum diese einfache Konstruktion verkomplizieren wollen? Oder wenn Sie dies nicht auf diese Weise tun möchten, versuchen Sie Folgendes zu verwenden:

Funktion. Python hat viele Funktionen zur Verfügung.

+5

Lesen Sie weitere Kommentare. 'l.reverse()' ist eine korrekte Antwort auf eine andere Frage. Niemand schreibt Code und weiß, wie viele Fehler es haben soll; es muss eine Aufgabe sein. – Amadan

0

Hausaufgaben Ich vermute, ...

Aber - wir alle brauchen eine Pause von Hausaufgaben. Wenn Sie die gesamte Liste durchlaufen, kehren Sie sie zweimal um.

def reverse(list): 
    """Reverses elements of a list.""" 
    for i in range(len(list)/2): 
     j = i + 1 
     x = list[i] 
     y = list[-j] 
     list[-j] = x 
     list[i] = y 

l = ['a', 'b', 'c', 'd', 'e'] 
l=reverse(l) 
print(l) 

was

['e', 'd', 'c', 'b', 'a']