2010-02-19 15 views
16

Esiste qualche funzione intelligente incorporata o qualcosa che restituisca 1 per l'esempio min() di seguito? (Scommetto che c'è una ragione solida per esso non restituisce nulla, ma nel mio caso particolare ho bisogno di ignorare None valori davvero male!)Elenco minimo in Python con Nessuno?

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

risposta

33

None viene restituita

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

Se si desidera tornare 1 bisogna filtrare la None via:

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

noti che 'none' viene restituito solo in Python 2. In Python 3,' min ([No, 1, 2]) produce un ' 'TypeError: '<' non è supportato tra istanze di 'int' e 'NoneType''. –

3

utilizzando un generatore di espressione:

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

alla fine, è possibile utilizzare il filtro:

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

è meglio confrontare l'identità quindi l'uguaglianza quando si ha a che fare con 'Nessuno' – SilentGhost

+0

hai ragione, corretto. –

+2

La sintassi non ha nulla di python 3. Funziona correttamente in python 2. L'uso di 'is' per il confronto con' Nessuno' come in 'valore non è None' è preferibile usare' == '(o'! = '). La linea con 'filter' è ** errata **, prova a mettere uno 0 nella lista e vedrai che verrà filtrato anche tu, che non è quello che vuoi. – nosklo