regresion predicciones modelos modelo metodos logistica ejemplos clasificador clasificacion algoritmo python python-2.x

predicciones - Python: min(Ninguno, x)



predicciones python (8)

¿Por qué no creas un generador sin ningún valor? Es más sencillo y limpio.

>>> l=[None ,3] >>> min(i for i in l if i is not None) 3

Me gustaría realizar lo siguiente:

a=max(a,3) b=min(b,3)

Sin embargo, a veces a y b pueden ser None .
Me alegró descubrir que, en el caso de max , funciona bien, dando el resultado requerido 3 , sin embargo, si b es None , b sigue siendo None ...

¿Alguien puede pensar en un pequeño y elegante truco para hacer que min devuelva el número en caso de que uno de los argumentos en Ninguno?


Aquí hay un decorador en línea que puede utilizar para filtrar los valores de Ninguno que podrían pasarse a una función:

noNones = lambda fn : lambda *args : fn(a for a in args if a is not None) print noNones(min)(None, 3) print noNones(max)(None, 3)

huellas dactilares:

3 3


La respuesta de @utdemir funciona muy bien para el ejemplo proporcionado, pero generaría un error en algunos escenarios.

Un problema que surge es si tiene una lista con solo valores None . Si proporciona una secuencia vacía a min() , generará un error:

>>> mylist = [None, None] >>> min(value for value in mylist if value) Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: min() arg is an empty sequence

Como tal, este fragmento evitaría el error:

def find_minimum(minimums): potential_mins = (value for value in minimums if value is not None) if potential_mins: return min(potential_mins)


Mi solución para Python 3 (3.4 y mayor):

min((x for x in lst if x is not None), default=None) max((x for x in lst if x is not None), default=None)


Puede usar un inline if y un infinito como predeterminado, ya que funcionará para cualquier valor:

a = max(a if a is not None else float(''-inf''), 3) b = min(b if b is not None else float(''inf''), 3)


Una solución para el Python 3.

Código :

# variable lst es tu 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:

Trabajados en secuencia se presentan como números y como ninguno. Si todos los valores son Ninguno, min () genera una excepción.

ValueError: min () arg es una secuencia vacía

Este código resuelve este problema en absoluto

Pros:

  1. Trabajó si ninguno se presenta en secuencia
  2. Trabajado en Python 3
  3. max () sera trabajo tambien

Contras

  1. Necesita más de una variable distinta de cero en la lista. es decir, [0, Ninguno] falla.
  2. Necesita una variable (ejemplo lst ) o necesita duplicar la secuencia

def max_none(a, b): if a is None: a = float(''-inf'') if b is None: b = float(''-inf'') return max(a, b) def min_none(a, b): if a is None: a = float(''inf'') if b is None: b = float(''inf'') return min(a, b) max_none(None, 3) max_none(3, None) min_none(None, 3) min_none(3, None)


a=max(a,3) if a is not None else 3 b=min(b,3) if b is not None else 3