Python: How to toggle between two values

2019-01-22 02:04发布

问题:

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?

回答1:

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


回答2:

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


回答3:

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


回答4:

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


回答5:

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


回答6:

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


回答7:

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


回答8:

var = 1
var = 1 - var

That's the official tricky way of doing it ;)



回答9:

Using the tuple subscript trick:

value = (1, 0)[value]


回答10:

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


回答11:

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.



回答12:

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



回答13:

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

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



标签: python toggle