2017-03-21 1 views
-1

Neu zu Codierung und Python, aber ich möchte wirklich lernen. Versuchen Sie, eine Funktion zu schreiben, um die Medianzahl aus einer sortierten Liste zu ziehen. Ich bekomme immer wieder den Fehler, dass der Listenindex außerhalb des zulässigen Bereichs liegt. Könnte mir jemand in die richtige Richtung weisen, um die Logik zu verstehen, damit ich programmatischer denken kann?Listenindex außerhalb des Bereichs auf Python-Funktion

def median(n): 
     sorted(n) 
     ln = len(n) 
     even1 = n[ln/2] 
     even2 = n[ln /2 - 1] 
     odd = n[ln + 1/2] 
     middle = 0 
     if ln % 2 != 0: 
      middle = odd 
     else: 
      middle = (even1 + even2)/2.0 

     return middle 
+1

Verwenden Sie 'sort' anstelle von' sorted' für die erste Zeile. 'sortierte' gibt nur eine sortierte Kopie von' n' zurück – Jerfov2

+1

Was passiert, wenn 'ln/2' ungerade ist? –

+0

Wofür ist die 'middle = 0' Zeile? – Jerfov2

Antwort

2
odd = n[ln + 1/2] 

ist ln + (1/2) ... zu ln + 0 übersetzen = ln. Sie versuchen, auf das Element n[ln] zuzugreifen, das außerhalb des Bereichs liegt.

sollte Diese Linie

odd = n[(ln + 1)/2] 
+0

Dank vergaß alles über Reihenfolge der Operationen dort. –

0

Der kritische Fehler bei der Berechnung des Mittelpunktes ist sein. Sie müssen Klammern:

odd = n[(ln + 1)/2] 

Sie noch einige Index Probleme haben (denken Sie daran, dass Python-Listen bei 0, nicht an 1), aber das ist die Quelle der "out of range" Problem. Um das Problem mit dem ungeraden Mittelpunkt zu beheben, müssen Sie ein Element sichern:

odd = n[(ln - 1)/2] 
+0

Danke für die Hilfe. Ich habe die Reihenfolge der Operationen in den Variablen völlig vergessen. Auch für die ungerade Variable habe ich nicht von 0 gezählt, also musste ich nicht 1 zur Länge hinzufügen –

Verwandte Themen