Python: How to toggle between two values

↘锁芯ラ 提交于 2019-11-28 05:46:50

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

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

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

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

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
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
Alex Chamberlain

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
var = 1
var = 1 - var

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

Using the tuple subscript trick:

value = (1, 0)[value]

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

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.

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

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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!