How to toggle between two values?

Question:

I want to toggle between two values in Python, that is, between 0 and 1.

For example, when I run a function the first time, it yields the number 0. Next time, it yields 1. Third time it’s back to zero, and so on.

Sorry if this doesn’t make sense, but does anyone know a way to do this?

Asked By: Yngve

||

Answers:

You can use the mod (%) operator.

count = 0  # initialize count once

then

count = (count + 1) % 2

will toggle the value of count between 0 and 1 each time this statement is executed. The advantage of this approach is that you can cycle through a sequence of values (if needed) from 0 - (n-1) where n is the value you use with your % operator. And this technique does not depend on any Python specific features/libraries.

e.g.

count = 0

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

gives:

1
0
1
0
1
Answered By: Levon

You can accomplish that with a generator like this:

>>> def alternate():
...   while True:
...     yield 0
...     yield 1
...
>>>
>>> alternator = alternate()
>>>
>>> alternator.next()
0
>>> alternator.next()
1
>>> alternator.next()
0
Answered By: g.d.d.c
var = 1
var = 1 - var

That’s the official tricky way of doing it 😉

Answered By: SetSlapShot

Using the tuple subscript trick:

value = (1, 0)[value]
Answered By: Shawn Chin

Using xor works, and is a good visual way to toggle between two values.

count = 1
count = count ^ 1 # count is now 0
count = count ^ 1 # count is now 1
Answered By: Alex Chamberlain

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

Note that if you need a more complicated cycle than [0, 1], this solution becomes much more attractive than the other ones posted here…

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, ...
Answered By: Platinum Azure

In python, True and False are integers (1 and 0 respectively). You could use a boolean (True or False) and the not operator:

var = not var

Of course, if you want to iterate between other numbers than 0 and 1, this trick becomes a little more difficult.

To pack this into an admittedly ugly function:

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
Answered By: mgilson
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
Answered By: Marcin

You may find it useful to create a function alias like so:

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

then

myfunc()    # -> returns 0
myfunc()    # -> returns 1
myfunc()    # -> returns 0
myfunc()    # -> returns 1
Answered By: Hugh Bothwell

Using tuple subscripts is one good way to toggle between two values:

toggle_val = 1

toggle_val = (1,0)[toggle_val]

If you wrapped a function around this, you would have a nice alternating switch.

Answered By: octopusgrabbus

Simple and general solution without using any built-in. Just keep the track of current element and print/return the other one then change the current element status.

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

Input:
3 8
3
5
Output:
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

Answered By: Gautam Seth

If a variable is previously defined and you want it to toggle between two values, you may use the
a if b else c form:

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

In addition, it works on Python 2.5+ and 3.x

See Expressions in the Python 3 documentation.

Answered By: Jorge Valentini

To toggle variable x between two arbitrary (integer) values,
e.g. a and 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

Example:

Toggle between 3 and 5

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

This works even with strings (sort of).

    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')
Answered By: ack

One cool way you can do in any language:

variable = 0
variable = abs(variable - 1)    // 1
variable = abs(variable - 1)    // 0

Answered By: SoloVen
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.