En python 3.x, ¿hay alguno a, btal que max(a, b) != max(b, a)?
ay bdebe ser de tipo python incorporado y no contener ninguna conversión.
El tipo de ay bpuede ser: num, float, bool, list, tuple ...
Ejemplo:
a = 1 # Correct
a = [1, 2] # Correct
a = float('nan') # Wrong

maxes una función incorporada que toma un objeto iterable como entrada. Entonces,a,bes lo mismo queb,apor 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
!=oisconfloat("nan")siempre devuelve falso.En términos más generales, podemos tener
max(a, b) != max(b, a)cuando los tipos dea, bno 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. Dicefloatallí, así que no estoy seguro de qué más esperabas que fuera. Puedes consultarlotypesi quieres.maxcomportamiento es un artefacto de definirlo de manera diferente a Cfmax(que garantiza la propagación de NaN), en cambio, como algoa<b ? b : aque siempre se produceacuando la comparación es falsa. NaN es wrt "desordenada". cualquier otro número, pora < NaNlo que siempre es falso, y también lo esNaN < bSegún la documentación , el uso
maxen conjuntos produce resultados indefinidos:Aquí hay un ejemplo,
Salida
fuente
minymax) u ordenando (parasorted).