Y a-t-il des a, b tels que max (a, b)! = Max (b, a)? [fermé]

11

En python 3.x, y en a-t-il a, bcomme ça max(a, b) != max(b, a)?

aet bdoit être de type python intégré et ne contenir aucune conversion.

Le type de aet bpeut être: num, float, bool, list, tuple ...

Exemple:

a = 1 # Correct
a = [1, 2] # Correct
a = float('nan') # Wrong

la source
1
votre question n'est pas claire
seralouk
Je ne pense pas qu'il y en ait ... maxest une fonction intégrée qui prend en entrée un objet itérable . Donc, a,bc'est la même chose que par b,aconséquent max(a,b)doit être égalmax(b,a)
Anwarvic
1
C'est une bonne question mais vous devez la modifier et l'expliquer davantage
El.Hum
2
Votre modification n'a de sens que dans le contexte de votre commentaire sous la réponse la plus votée. Là et ici, vous ne soutenez pas que ce float('nan')n'est pas un type intégré. Je suppose que «type intégré» signifierait tout ce que vous pouvez créer sans avoir à en créer un nouveau class.
Teepeemm
2
Si vous voulez exclure float('nan'), alors pourquoi? Pour être clair, vous êtes autorisé à poser une question dans laquelle vous excluez quelque chose comme float('nan')si vous voulez; ce n'est pas le problème. Le problème est juste que personne ne sait ce que vous essayez de demander.
Nat

Réponses:

17

Cela répond à tous les critères:

>>> max(1.0, float("nan"))
1.0

>>> max(float("nan"), 1.0)
nan

En effet, toute comparaison autre que !=ou isavec float("nan")renvoie toujours false.

Plus généralement, nous pouvons en avoir max(a, b) != max(b, a)lorsque le (s) type (s) a, bne fournissent pas de commande totale. Comme le souligne Daniel Mesejo, les ensembles ont également cette propriété. For sets <signifie 'strict subset', mais avec {1, 2}et {3, 4}ni l'un ni l'autre n'est un sous-ensemble strict de l'autre, donc:

>>> max({1, 2}, {3, 4})
{1, 2}

>>> max({3, 4}, {1, 2})
{3, 4}

Celui-ci n'a techniquement pas max(a, b) != max(b, a)parce que 1 == True, mais il y a toujours une différence observable:

>>> max(True, 1)
True

>>> max(1, True)
1
orlp
la source
1
WOW ... pourquoi est-ce ??
Anwarvic
7
@ stackFF4 si float("nan")n'est pas intégré, qu'est-ce que c'est? Il est certainement intégré.
sanyash
9
@ stackFF4: float('nan')est un flottant. Il est écrit floatjuste là, donc je ne sais pas ce que vous attendiez d'autre. Vous pouvez le vérifier avec typesi vous le souhaitez.
user2357112 prend en charge Monica
1
@Anwarvic: Fait intéressant, ce n'est pas une chose en python, c'est en fait la façon dont les flotteurs sont implémentés dans le matériel. NaN compare false avec tout dans presque tous les langages de programmation.
Mooing Duck
2
@ Nat: Mais personne ne veut d'exceptions la plupart du temps. Ce maxcomportement est un artefact de le définir différemment de C fmax(qui garantit la propagation de NaN), au lieu de cela comme quelque chose comme a<b ? b : aqui produit toujours alorsque la comparaison est fausse. NaN est écrit "non ordonné". tout autre numéro, a < NaNest donc toujours faux, et est ainsiNaN < b
Peter Cordes
5

Selon la documentation , en utilisantmax d'ensembles produit des résultats indéfinis:

Par conséquent, les ensembles ne sont pas des arguments appropriés pour les fonctions qui dépendent de l'ordre total (par exemple, min (), max () et sorted () produisent des résultats indéfinis étant donné une liste d'ensembles en entrée).

Voici un exemple,

a = {1, 2}
b = {2, 3}
print(max(b, a) != max(a, b))

Production

True
Dani Mesejo
la source
Il convient de noter ici que les "résultats indéfinis" sont probablement plus sains en Python que dans d'autres langages. Aucun démon nasal n'est probable, et cela ne soulèvera probablement même pas d'exception. Il renvoie simplement une valeur principalement arbitraire (pour minet max) ou un ordre (pour sorted).
Blckknght