¿Hay alguna a, b tal que max (a, b)! = Max (b, a)? [cerrado]


11

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

1
su pregunta no está clara
— seralouk

No creo que haya ninguna ... maxes una función incorporada que toma un objeto iterable como entrada. Entonces, a,bes lo mismo que b,apor lo tanto max(a,b)debe ser igualmax(b,a)
— Anwarvic

1
Esta es una buena pregunta, pero deberías editarla y explicarla más
— El.Hum

2
Su edición solo tiene sentido en el contexto de su comentario debajo de la respuesta más votada. Aquí y aquí, no puede argumentar que float('nan')no es un tipo incorporado. Supongo que "tipo incorporado" significaría cualquier cosa que pueda crear sin tener que crear uno nuevo class.
— Teepeemm

2
Si desea excluir float('nan'), ¿por qué? Para ser claros, puede hacer una pregunta en la que excluye algo como float('nan')si lo desea; Ese no es el problema. El problema es que nadie está seguro de lo que estás tratando de preguntar.
— Nat

Respuestas:


17

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 iscon float("nan")siempre devuelve falso.

En términos más generales, podemos tener max(a, b) != max(b, a)cuando los tipos de a, 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:

>>> 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

1
WOW ... ¿por qué es eso?
— Anwarvic

77
@ stackFF4 si float("nan")no está integrado, ¿qué es? Ciertamente está incorporado.
— sanyash

99
@ stackFF4: float('nan')es un flotador. Dice floatallí, así que no estoy seguro de qué más esperabas que fuera. Puedes consultarlo typesi quieres.
— user2357112 es compatible con Monica el

1
@Anwarvic: Curiosamente, no es una cosa de Python, en realidad es cómo se implementan los flotadores en el hardware. NaN compara falso con todo en casi todos los lenguajes de programación.
— Mooing Duck

2
@Nat: Pero nadie quiere excepciones la mayor parte del tiempo. Este maxcomportamiento es un artefacto de definirlo de manera diferente a C fmax(que garantiza la propagación de NaN), en cambio, como algo a<b ? b : aque siempre se produce acuando la comparación es falsa. NaN es wrt "desordenada". cualquier otro número, por a < NaNlo que siempre es falso, y también lo esNaN < b
— Peter Cordes

5

Según la documentación , el uso maxen conjuntos produce resultados indefinidos:

En consecuencia, 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

Vale la pena señalar aquí que los "resultados indefinidos" son probablemente más seguros en Python que en otros lenguajes. No es probable que haya demonios nasales , y probablemente ni siquiera planteará una excepción. Simplemente devuelve un valor principalmente arbitrario (para miny max) u ordenando (para sorted).
— Blckknght
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.