2017-04-26 2 views
1

Könnte mir bitte jemand erklären, warum das nicht funktioniert? Die Fehlermeldung, die ich erhalte, ist: TypeError: Listenindizes müssen Ganzzahlen oder Slices sein, nicht float.Python Den Median-Funktionsfehler finden

def median(lst): 
    s = sorted(lst) 
    l = len(lst)/2 
    if len(lst) % 2 == 0: 
     print((s[l] + s[l-1])/2.0) 
    else: 
     print(s[l]) 
median([3,3,5,6,7,8,1]) 
+1

gut ... Liste Indizes müssen ganze Zahlen oder Scheiben sein, nicht schwimmen. Also erzwinge l, um eine ganze Zahl zu sein – FLab

+1

Du teilst 'len (lst)' durch zwei, was einen float ergibt. Sie können stattdessen Ganzzahldivision verwenden ('//'). – L3viathan

Antwort

0

Fehler Sie wird bei der Berechnung l

Verwendung Bediener Dividieren / tatsächliche Teilung dh ein Gleitkommawert kehrt während // kehrt nur Quotient dh einem ganzzahligen

daher

sollten Sie l wie folgt berechnen ws

l = len(lst) // 2 

oder konvertieren l zu int mit

l = int(l) 
+0

Bitte überlegen Sie mir, ob es hilfreich war – Ani

0

Wenn len(lst) ungerade ist, dann wird l ein Schwimmer.

Interessanterweise ist der Code, den Sie geschrieben haben, wahrscheinlich in Python 2 gültig, da er Ganzzahldivision verwendet, wenn sowohl der Zähler als auch der Nenner ganze Zahlen sind.

In Python 3 wird jedoch standardmäßig true division verwendet.

Für weitere Informationen siehe: In Python 2, what is the difference between '/' and '//' when used for division? und https://docs.python.org/whatsnew/2.2.html#pep-238-changing-the-division-operator