2016-11-29 1 views
-3

I min Wert aus der Liste mit Schleife zu bekommen, aber ich erhalte eine Fehlermeldung:Min Wert aus der Liste witout Keine Werte

Python 3.5.2 (default, Dec 2015, 13:05:11) 
[GCC 4.8.2] on linux 

Traceback (most recent call last): 
    File "python", line 6, in <module> 
TypeError: unorderable types: int() < NoneType() 

Hier ist mein Code:

tab = [1,2,3,4, None, None, None] 

min_value = None 
for i in tab: 
    if i: 
    if int(i) < min_value: 
     min_value = i 
     print(min_value) 
+1

Mögliche Duplikat [Typeerror (unorderable Typen: int() <= NoneType())] (http://stackoverflow.com/questions/23364190/typeerror-unorderable-types-int-nonetype) – lubilis

+0

Was Ergebnis erwartest du vom Vergleich eines int mit 'None'? – khelwood

Antwort

1

initialisieren min_value auf numerisch etwas anstatt zu keiner.

min_value = float("inf") 

Sie können auch die min() Funktion für diese Art der Sache verwenden:

min(v for v in tab if v is not None) 
+0

Danke, es funktioniert. –

1

wenig einfacher

tab = [1,2,3,4, None, None, None] 

print(min([i for i in tab if not i == None])) 
+0

was ist wenn ich 0 bin? Verwenden Sie explizit "i! = Keine" –

+0

@mu 無 Sie haben Recht! –

+2

Der kanonische Weg, um zu überprüfen, ob etwas nicht "None" ist, ist die Identität, da es sich um ein Singleton-Objekt handelt: "Wenn ich nicht None bin". (Und 'not i == None' wäre etwas aufgeräumter als' i! = None'.) – TigerhawkT3

1

Sie erklärte einen Anfangswert von None, die nicht verglichen werden kann, zu Zahlen. Versuchen Sie einen sehr hohen Wert, der wahrscheinlich nicht in der Liste enthalten ist - oder, noch besser, greifen Sie einfach den ersten Punkt der Liste und verwenden Sie ihn. Stellen Sie sicher, es auf 0 zu setzen, wenn es etwas falsches erhält (ähnlich dem, was Sie in der Schleife mit if i: tun).

Sie können die Bedingungen für das Setzen eines neuen min_value mit dem logischen Operator and kombinieren.

Setzen Sie auch den print Aufruf außerhalb der Schleife, so dass Sie nur den endgültigen Wert drucken.

tab = [1,2,3,4, None, None, None] 

min_value = tab[0] or 0 
for i in tab: 
    if i and int(i) < min_value: 
      min_value = i 

print(min_value) 
Verwandte Themen