2010-02-19 6 views
16

Gibt es eine clevere eingebaute Funktion oder etwas, das 1 für das min() Beispiel zurückgibt? (Ich wette, es gibt einen festen Grund dafür nichts zurück, aber in meinem Fall ich es brauche None Werte wirklich schlecht zu ignorieren!)Liste Minimum in Python mit keiner?

>>> max([None, 1,2]) 
2 
>>> min([None, 1,2]) 
>>> 

Antwort

33

None wird

zurück
>>> print min([None, 1,2]) 
None 
>>> None < 1 
True 

Wenn Sie wollen zurück 1 Sie die None weg zu filtern haben:

>>> L = [None, 1, 2] 
>>> min(x for x in L if x is not None) 
1 
+1

Beachten Sie, dass 'None' nur in Python 2. In Python 3 zurückgegeben wird,' min ([None, 1, 2]) 'ergibt ein 'TypeError: '<' wird zwischen Instanzen von 'int' und 'NoneType' nicht unterstützt. –

3

mit einem Generator Ausdruck:

>>> min(value for value in [None,1,2] if value is not None) 
1 

schließlich, Sie Filter verwenden:

>>> min(filter(lambda x: x is not None, [None,1,2])) 
1 
+1

ist es besser, Identität dann Gleichheit zu vergleichen, wenn Sie mit 'None' umgehen – SilentGhost

+0

Sie sind richtig, korrigiert. –

+2

Die Syntax hat nichts Python 3. Es funktioniert in Python 2 ganz gut. Die Verwendung von 'is' zum Vergleichen mit' None', wie in 'value is not None', wird bevorzugt mit' == '(oder'! = ') Verwendet. Die Zeile mit 'filter' ist ** falsch **, versuche eine 0 in die Liste zu setzen und du wirst sehen, dass sie auch gefiltert wird, was nicht das ist, was du willst. – nosklo