python - ¿Hay alguna a, b tal que max(a, b)!=Max(b, a)?
python-3.x (2)
Esto satisface todos los criterios:
>>> max(1.0, float("nan"))
1.0
>>> max(float("nan"), 1.0)
nan
Esto se debe a que cualquier comparación que no sea
!=
O
is
con
float("nan")
siempre devuelve falso.
En términos más generales, podemos tener
max(a, b) != max(b, a)
cuando el tipo (s) de
a, b
no proporciona un orden total.
Como señala Daniel Mesejo, los conjuntos también tienen esta propiedad.
Para conjuntos
<
significa ''subconjunto estricto'', pero con
{1, 2}
y
{3, 4}
ninguno es un subconjunto estricto del otro, entonces:
>>> max({1, 2}, {3, 4})
{1, 2}
>>> max({3, 4}, {1, 2})
{3, 4}
Este técnicamente no tiene
max(a, b) != max(b, a)
porque
1 == True
, pero todavía hay una diferencia observable:
>>> max(True, 1)
True
>>> max(1, True)
1
En python 3.x, ¿hay alguna
a
,
b
tal que
max(a, b) != max(b, a)
?
b
deben ser del tipo python incorporado y no contener ninguna conversión.
El tipo de
b
puede ser: num, float, bool, list, tuple ...
Ejemplo:
a = 1 # Correct
a = [1, 2] # Correct
a = float(''nan'') # Wrong
Según la
documentation
, el uso de
max
on sets produce resultados indefinidos:
Por consiguiente, los conjuntos no son argumentos apropiados para funciones que dependen del orden total (por ejemplo, min (), max () y sorted () producen resultados indefinidos dada una lista de conjuntos como entradas).
Aquí hay un ejemplo,
a = {1, 2}
b = {2, 3}
print(max(b, a) != max(a, b))
Salida
True