2010-02-19 11 views
16

¿Hay alguna función inteligente incorporada o algo que devolverá 1 para el ejemplo min() a continuación? (Apuesto a que hay una razón sólida para que no devuelve nada, pero en mi caso particular, lo necesito hacer caso omiso de None valores muy mal!)¿Lista mínima en Python con ninguno?

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

Respuesta

33

None está siendo devuelto

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

Si desea volver 1 que tiene que realizar un filtrado del None distancia:

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

Nota que 'None' solamente se devuelve en Python 2. En Python 3,' min ([No, 1, 2]) 'produce una 'TypeError: '<' no soportado entre instancias de 'int' y 'NoneType'». –

3

utilizando una expresión generadora:

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

finalmente, es posible que el uso de filtro:

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

es mejor comparar la identidad que la igualdad cuando se trata de 'Ninguna' – SilentGhost

+0

tienes razón, se corrigió. –

+2

La sintaxis no tiene nada python 3. Funciona perfectamente en python 2. El uso de 'is' para comparar con' None' como en 'value is not None' se prefiere usando' == 'o'! = '). La línea con 'filter' está ** mal **, intenta poner un 0 en la lista y verás que también se filtrará, que no es lo que quieres. – nosklo

Cuestiones relacionadas