En python 3.x, ¿hay alguno a
, b
tal que max(a, b) != max(b, a)
?
a
y b
debe ser de tipo python incorporado y no contener ninguna conversión.
El tipo de a
y b
puede ser: num, float, bool, list, tuple ...
Ejemplo:
a = 1 # Correct
a = [1, 2] # Correct
a = float('nan') # Wrong
max
es una función incorporada que toma un objeto iterable como entrada. Entonces,a,b
es lo mismo queb,a
por lo tantomax(a,b)
debe ser igualmax(b,a)
float('nan')
no es un tipo incorporado. Supongo que "tipo incorporado" significaría cualquier cosa que pueda crear sin tener que crear uno nuevoclass
.float('nan')
, ¿por qué? Para ser claros, puede hacer una pregunta en la que excluye algo comofloat('nan')
si lo desea; Ese no es el problema. El problema es que nadie está seguro de lo que estás tratando de preguntar.Respuestas:
Esto satisface todos los criterios:
Esto se debe a que cualquier comparación que no sea
!=
ois
confloat("nan")
siempre devuelve falso.En términos más generales, podemos tener
max(a, b) != max(b, a)
cuando los tipos dea, b
no proporcionan un pedido 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:Este técnicamente no tiene
max(a, b) != max(b, a)
porque1 == True
, pero todavía hay una diferencia observable:fuente
float("nan")
no está integrado, ¿qué es? Ciertamente está incorporado.float('nan')
es un flotador. Dicefloat
allí, así que no estoy seguro de qué más esperabas que fuera. Puedes consultarlotype
si quieres.max
comportamiento es un artefacto de definirlo de manera diferente a Cfmax
(que garantiza la propagación de NaN), en cambio, como algoa<b ? b : a
que siempre se producea
cuando la comparación es falsa. NaN es wrt "desordenada". cualquier otro número, pora < NaN
lo que siempre es falso, y también lo esNaN < b
Según la documentación , el uso
max
en conjuntos produce resultados indefinidos:Aquí hay un ejemplo,
Salida
fuente
min
ymax
) u ordenando (parasorted
).