Je souhaite basculer entre deux valeurs en Python, c’est-à-dire entre 0 et 1.
Par exemple, lorsque j'exécute une fonction pour la première fois, le résultat est 0. La prochaine fois, il donne 1. La troisième fois, il revient à zéro et ainsi de suite.
Désolé si cela n'a pas de sens, mais est-ce que quelqu'un connaît un moyen de faire cela?
Utilisez itertools.cycle()
:
from itertools import cycle
myIterator = cycle(range(2))
myIterator.next() # or next(myIterator) which works in Python 3.x. Yields 0
myIterator.next() # or next(myIterator) which works in Python 3.x. Yields 1
# etc.
Notez que si vous avez besoin d'un cycle plus compliqué que [0, 1]
, cette solution devient BEAUCOUP plus attrayante que les autres postées ici ...
from itertools import cycle
mySmallSquareIterator = cycle(i*i for i in range(10))
# Will yield 0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 0, 1, 4, ...
Vous pouvez accomplir cela avec un générateur comme celui-ci:
>>> def alternate():
... while True:
... yield 0
... yield 1
...
>>>
>>> alternator = alternate()
>>>
>>> alternator.next()
0
>>> alternator.next()
1
>>> alternator.next()
0
Vous pouvez trouver utile de créer un alias de fonction comme ceci:
import itertools
myfunc = itertools.cycle([0,1]).next
puis
myfunc() # -> returns 0
myfunc() # -> returns 1
myfunc() # -> returns 0
myfunc() # -> returns 1
vous pouvez utiliser l'opérateur mod (%
).
count = 0 # initialize count once
puis
count = (count + 1) % 2
va basculer la valeur du compte entre 0 et 1 chaque fois que cette instruction est exécutée. Le avantage de cette approche est que vous pouvez parcourir une séquence de valeurs (si nécessaire) depuis 0 - (n-1)
, où n
est la valeur que vous utilisez avec votre opérateur %
. Et cette technique ne dépend d'aucune fonctionnalité/bibliothèque spécifique à Python.
par exemple.,
count = 0
for i in range(5):
count = (count + 1) % 2
print count
donne:
1
0
1
0
1
En python, True et False sont des entiers (1 et 0 respectivement). Vous pouvez utiliser un booléen (vrai ou faux) et l'opérateur non:
var = not var
Bien sûr, si vous voulez parcourir des nombres autres que 0 et 1, cette astuce devient un peu plus difficile.
Pour intégrer cela dans une fonction certes laide:
def alternate():
alternate.x=not alternate.x
return alternate.x
alternate.x=True #The first call to alternate will return False (0)
mylist=[5,3]
print(mylist[alternate()]) #5
print(mylist[alternate()]) #3
print(mylist[alternate()]) #5
from itertools import cycle
alternator = cycle((0,1))
next(alternator) # yields 0
next(alternator) # yields 1
next(alternator) # yields 0
next(alternator) # yields 1
#... forever
Utiliser xor
fonctionne et constitue un bon moyen visuel de basculer entre deux valeurs.
count = 1
count = count ^ 1 # count is now 0
count = count ^ 1 # count is now 1
Pour basculer la variable x entre deux valeurs (entières) arbitraires, par exemple. a et b, utilisez:
# start with either x == a or x == b
x = (a + b) - x
# case x == a:
# x = (a + b) - a ==> x becomes b
# case x == b:
# x = (a + b) - b ==> x becomes a
Exemple:
Basculer entre 3 et 5
x = 3
x = 8 - x (now x == 5)
x = 8 - x (now x == 3)
x = 8 - x (now x == 5)
Cela fonctionne même avec des chaînes (en quelque sorte).
YesNo = 'YesNo'
answer = 'Yes'
answer = YesNo.replace(answer,'') (now answer == 'No')
answer = YesNo.replace(answer,'') (now answer == 'Yes')
answer = YesNo.replace(answer,'') (now answer == 'No')
var = 1
var = 1 - var
C'est la manière délicate officielle de le faire;)
En utilisant l'astuce Tuple indice:
value = (1, 0)[value]
L'utilisation des indices Tuple est un bon moyen de basculer entre deux valeurs:
toggle_val = 1
toggle_val = (1,0)[toggle_val]
Si vous encapsuliez une fonction autour de cela, vous auriez un commutateur alternatif de Nice.
Solution simple et générale sans utiliser aucun intégré. Il suffit de garder la trace de l’élément actuel et d’imprimer/retourner l’autre, puis de modifier le statut de l’élément actuel.
a, b = map(int, raw_input("Enter both number: ").split())
flag = input("Enter the first value: ")
length = input("Enter Number of iterations: ")
for i in range(length):
print flag
if flag == a:
flag = b;
else:
flag = a
Contribution:
3 8
3
5
Sortie:
3
8
3
8
3 Means numbers to be toggled are 3 and 8
Second input, is the first value by which you want to start the sequence
And last input indicates the number of times you want to generate
Si une variable est définie précédemment et que vous souhaitez la basculer entre deux valeurs, vous pouvez utiliser la forme a si b sinon c:
variable = 'value1'
variable = 'value2' if variable=='value1' else 'value1'
En outre, cela fonctionne sur Python 2.5+ et 3.x
https://docs.python.org/3/reference/expressions.html#conditional-expressions