Python: Cómo alternar entre dos valores

Quiero alternar entre dos valores en Python, es decir, entre 0 y 1.

Por ejemplo, cuando ejecuto una función la primera vez, produce el número 0. La próxima vez produce 1. La tercera vez vuelve a cero, y así sucesivamente.

Lo siento si esto no tiene sentido, pero ¿alguien sabe una manera de hacer esto?

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

Tenga en cuenta que si necesita un ciclo más complicado que [0, 1] , esta solución se vuelve MUCHO más atractiva que las otras publicadas aquí …

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

Puedes lograr eso con un generador como este:

 >>> def alternate(): ... while True: ... yield 0 ... yield 1 ... >>> >>> alternator = alternate() >>> >>> alternator.next() 0 >>> alternator.next() 1 >>> alternator.next() 0 

Puede resultarle útil crear un alias de función así:

 import itertools myfunc = itertools.cycle([0,1]).next 

entonces

 myfunc() # -> returns 0 myfunc() # -> returns 1 myfunc() # -> returns 0 myfunc() # -> returns 1 

Puede utilizar el operador mod ( % ).

 count = 0 # initialize count once 

entonces

 count = (count + 1) % 2 

cambiará el valor de conteo entre 0 y 1 cada vez que se ejecute esta instrucción. La ventaja de este enfoque es que puede recorrer una secuencia de valores (si es necesario) desde 0 - (n-1) donde n es el valor que usa con su operador % . Y esta técnica no depende de ninguna de las características / bibliotecas específicas de Python.

p.ej,

 count = 0 for i in range(5): count = (count + 1) % 2 print count 

da:

 1 0 1 0 1 

En python, True y False son enteros (1 y 0 respectivamente). Podría usar un booleano (Verdadero o Falso) y el operador no:

 var = not var 

Por supuesto, si quieres iterar entre otros números que no sean 0 y 1, este truco se vuelve un poco más difícil.

Para empaquetar esto en una función ciertamente fea:

 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 

Usar xor funciona, y es una buena forma visual de alternar entre dos valores.

 count = 1 count = count ^ 1 # count is now 0 count = count ^ 1 # count is now 1 
 var = 1 var = 1 - var 

Esa es la forma oficial y complicada de hacerlo;)

Usando el truco del subíndice de tuple:

 value = (1, 0)[value] 

Para alternar la variable x entre dos valores arbitrarios (enteros), por ejemplo, a y b, use:

  # 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 

Ejemplo:

Alternar entre 3 y 5

  x = 3 x = 8 - x (now x == 5) x = 8 - x (now x == 3) x = 8 - x (now x == 5) 

Esto funciona incluso con cuerdas (tipo de).

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

El uso de subíndices de tuplas es una buena manera de alternar entre dos valores:

 toggle_val = 1 toggle_val = (1,0)[toggle_val] 

Si envolvieras una función alrededor de esto, tendrías un buen interruptor alterno.

Solución simple y general sin usar ninguna incorporada. Solo mantenga la pista del elemento actual e imprima / devuelva el otro, luego cambie el estado del elemento actual.

 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 

Entrada:
3 8
3
5
Salida:
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 una variable está definida previamente y desea que alterne entre dos valores, puede usar la forma a si b else c :

 variable = 'value1' variable = 'value2' if variable=='value1' else 'value1' 

Además, funciona en Python 2.5+ y 3.x

https://docs.python.org/3/reference/expressions.html#conditional-expressions