valor una numeros minimos minimo maximos maximo matriz lista hallar entre encontrar elemento diccionario calcular algoritmo python python-3.x

numeros - minimo valor en una lista python



Python: valores máximos y mínimos utilizables (3)

En cPython, el cmp no realiza una conversión a flotar implícitamente. Es decir, esto funciona:

>>> float(''inf'') > 2**5000 True

Mientras esto realiza explícitamente la conversión dread:

>>> float(''inf'') > float(2**5000) Overflow...

La respuesta correcta , IMHO, no es un valor per se por un cambio en la lógica:

def func_with_min(): minval=None for loop in list_with_mins: if minval is None or minval<minseen: # do that min thing you wanna do...

Si quieres tener un valor , float(''-inf'') para min y float(''inf'') es bastante seguro. Asegúrese de guardar en caché que fuera de un bucle sin embargo:

def func(): minval=float(''-inf'') for loop in now_you_can_loop: # otherwise float(''-inf'') is kinda slow

Python 2.x permite comparar tipos heterogéneos.

Un atajo útil (en Python 2.7 aquí) es que None compara más pequeño que cualquier valor entero o flotante:

>>> None < float(''-inf'') < -sys.maxint * 2l < -sys.maxint True

Y en Python 2.7 una tupla vacía () es un valor infinito:

>>> () > float(''inf'') > sys.maxint True

Este método abreviado es útil cuando uno puede ordenar una lista mixta de entradas y flotillas y desea tener un mínimo absoluto y un máximo para hacer referencia.

Sin embargo, este acceso directo se ha eliminado en Python 3000 (esto es Python 3.2):

>>> None < 0 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unorderable types: NoneType() < int()

Además, Python3000 ha eliminado sys.maxint en la teoría de que todos los ints promueven los largos y el límite ya no se aplica.

PEP 326 , un caso para los valores superior e inferior, avanzó una referencia min y max en Python. El nuevo comportamiento de pedido documented .

Desde que se rechazó PEP 326, ¿cuáles son las definiciones útiles y utilizables para un valor mínimo y máximo que funcionan con enteros y flotantes y largos en Python 2X y Python 3000?

Editar

Varias respuestas están en la línea de "solo use maxv = float (''inf'')" ... La razón por la que estoy pensando, por remota que sea la posibilidad, es la siguiente:

>>> float(2**5000) Traceback (most recent call last): File "<stdin>", line 1, in <module> OverflowError: long int too large to convert to float

Y:

>>> cmp(1.0**4999,10.0**5000) Traceback (most recent call last): File "<stdin>", line 1, in <module> OverflowError: (34, ''Result too large'')

Todavía:

>>> () > 2**5000 True

Para que cmp alcance un valor flotante, float(''inf'') , el valor largo tendría que convertirse en un valor flotante y la conversión causaría un OverflowError ...

Conclusión

Gracias a todos por sus respuestas y comentarios. Escogí la answer de TryPyPy porque parecía más en línea con lo que estaba preguntando: un valor absoluto más grande y más absoluto como se describe en la entrada de Wikipedia en el infinito.

Con esta pregunta, aprendí que un valor largo o int no se convierte a un valor flotante para completar la comparación de float(''inf'') > 2**5000 . No sabía eso.


Para comparaciones numéricas, +- float("inf") debería funcionar.

EDIT: No siempre funciona (pero cubre los casos realistas):

print(list(sorted([float("nan"), float("inf"), float("-inf"), float("nan"), float("nan")]))) # NaNs sort above and below +-Inf # However, sorting a container with NaNs makes little sense, so not a real issue.

Para tener objetos que se comparan como superiores o inferiores a cualquier otro objeto arbitrario (incluida inf , pero excluyendo a otros tramposos como los que aparecen a continuación), puede crear clases que establezcan su máximo / mínimo en sus métodos especiales para comparaciones:

class _max: def __lt__(self, other): return False def __gt__(self, other): return True class _min: def __lt__(self, other): return True def __gt__(self, other): return False MAX, MIN = _max(), _min() print(list(sorted([float("nan"), MAX, float(''inf''), MIN, float(''-inf''), 0,float("nan")]))) # [<__main__._min object at 0xb756298c>, nan, -inf, 0, inf, nan, <__main__._max object at 0xb756296c>]

Por supuesto, se necesita más esfuerzo para cubrir las variantes ''o iguales''. Y no solucionará el problema general de no poder ordenar una lista que contenga None e int , pero eso también debería ser posible con un poco de envoltura y / o decorar-ordenar-ordenar-decorar-decapar (por ejemplo, clasificar una lista de tuplas de (typename, value) ).


Ya tienes las opciones más obvias en tu pregunta: float(''-inf'') y float(''inf'') .

Además, tenga en cuenta que None es menos que todo y que la tupla vacía es más alta que todo en Py2, y, por ejemplo, Jython y PyPy tienen todo el derecho de usar un orden diferente si así lo desean. Todo lo que se garantiza es la coherencia dentro de una copia en ejecución del intérprete; el orden real es arbitrario.