148 votes

raccourci if-else de Python

Duplicata possible :
Opérateur conditionnel ternaire en Python

Je veux faire ce qui suit en python :

while( i < someW && j < someX){
   int x = A[i] > B[j]? A[i++]:B[j++];
   ....
}

Clairement, quand l'un ou l'autre i o j atteint une limite, le code sortira de la boucle. J'ai besoin des valeurs de i y j en dehors de la boucle.

Dois-je vraiment faire

x=0
...
if A[i] > B[j]:
  x = A[i]
  i+=1
else:
  x = B[j]
  j+=1

Ou quelqu'un connaît-il un chemin plus court ?

Outre ce qui précède, puis-je faire en sorte que Python prenne en charge quelque chose de similaire à

a,b=5,7
x = a > b ? 10 : 11

336voto

Lev Levitsky Points 25303

La façon la plus lisible est

x = 10 if a > b else 11

mais vous pouvez utiliser and y or aussi :

x = a > b and 10 or 11

Le "Zen de Python" dit que "la lisibilité compte", alors optez pour la première solution.

De plus, l'astuce and-or échouera si vous mettez une variable au lieu de 10 et il est évalué à False .

Cependant, si plus que la mission dépend de cette condition, il sera plus lisible de l'écrire comme vous l'avez fait :

if A[i] > B[j]:
  x = A[i]
  i += 1
else:
  x = A[j]
  j += 1

à moins que vous ne mettiez i y j dans un conteneur. Mais si vous nous montrez pourquoi vous en avez besoin, il se pourrait bien que vous n'en ayez pas besoin.

19voto

DonCallisto Points 9157

Essayez ça :

x = a > b and 10 or 11

Il s'agit d'un exemple d'exécution :

>>> a,b=5,7
>>> x = a > b and 10 or 11
>>> print x
11

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X