Una solución para el Python 3
Código:
# variable lst es su secuencia
min(filter(lambda x: x is not None, lst)) if any(lst) else None
Ejemplos:
In [3]: lst = [None, 1, None]
In [4]: min(filter(lambda x: x is not None, lst)) if any(lst) else None
Out[4]: 1
In [5]: lst = [-4, None, 11]
In [6]: min(filter(lambda x: x is not None, lst)) if any(lst) else None
Out[6]: -4
In [7]: lst = [0, 7, -79]
In [8]: min(filter(lambda x: x is not None, lst)) if any(lst) else None
Out[8]: -79
In [9]: lst = [None, None, None]
In [10]: min(filter(lambda x: x is not None, lst)) if any(lst) else None
In [11]: print(min(filter(lambda x: x is not None, lst)) if any(lst) else None)
None
Notas:
Trabaja en la secuencia se presenta como números, así como Ninguno.Si todos los valores son Ninguno min() excepción aumento
ValueError: min() arg is an empty sequence
Este código de resolver este problema en todos los
Pros:
- funcionado si Ninguno presenta en secuencia
- trabajado en Python 3
- max() también funcionará
Contras
Necesita una variable (ejemplo LST) o necesitan duplicar la secuencia
No hace lo correcto. Da el resultado esperado en uno de dos casos porque la comparación sin sentido entre 'NoneType' y' int' devuelve un valor fijo independientemente del valor entero. En Python 3, obtienes un 'TypeError' cuando haces cosas como esa (comparando tipos que no tienen un orden significativo). – delnan
Parece una incoherencia en Python, más que cualquier otra cosa. –
http://stackoverflow.com/questions/2214194/is-everything-greater-than-none –