Python: как переключаться между двумя значениями
Я хочу переключать между двумя значениями в Python, то есть между 0 и 1.
Например, когда я запускаю функцию в первый раз, она дает число 0. В следующий раз это дает 1. В третий раз возвращается к нулю и т.д.
Извините, если это не имеет смысла, но кто-нибудь знает способ сделать это?
Ответы
Ответ 1
Используйте 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.
Обратите внимание, что если вам нужен более сложный цикл, чем [0, 1]
, это решение становится МНОГО более привлекательным, чем другие, размещенные здесь...
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
Вы можете выполнить это с помощью генератора следующим образом:
>>> def alternate():
... while True:
... yield 0
... yield 1
...
>>>
>>> alternator = alternate()
>>>
>>> alternator.next()
0
>>> alternator.next()
1
>>> alternator.next()
0
Ответ 3
Вы можете счесть полезным создать псевдоним функции следующим образом:
import itertools
myfunc = itertools.cycle([0,1]).next
затем
myfunc() # -> returns 0
myfunc() # -> returns 1
myfunc() # -> returns 0
myfunc() # -> returns 1
Ответ 4
вы можете использовать оператор mod (%
).
count = 0 # initialize count once
то
count = (count + 1) % 2
будет переключать значение count между 0 и 1 каждый раз, когда выполняется эта инструкция. Преимущество этого подхода состоит в том, что вы можете циклически перебирать последовательность значений (если необходимо) из 0 - (n-1)
, где n
- это значение, которое вы используете с вашим оператором %
. И этот метод не зависит от каких-либо специфических функций/библиотек Python.
например.
count = 0
for i in range(5):
count = (count + 1) % 2
print count
дает:
1
0
1
0
1
Ответ 5
В python True и False являются целыми числами (1 и 0 соответственно). Вы можете использовать логическое (True или False) и не оператор:
var = not var
Конечно, если вы хотите итерации между другими числами, чем 0 и 1, этот трюк становится немного сложнее.
Чтобы упаковать это в поистине уродливую функцию:
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
Использование xor
работает и является хорошим визуальным способом переключения между двумя значениями.
count = 1
count = count ^ 1 # count is now 0
count = count ^ 1 # count is now 1
Ответ 8
var = 1
var = 1 - var
То, что официальный каверзный способ сделать это;)
Ответ 9
Используя трюк подстрочного набора:
value = (1, 0)[value]
Ответ 10
Использование индексов кортежей - один из хороших способов переключения между двумя значениями:
toggle_val = 1
toggle_val = (1,0)[toggle_val]
Если вы обернули функцию вокруг этого, у вас будет хороший переменный переключатель.
Ответ 11
Простое и общее решение без использования встроенного. Просто сохраните дорожку текущего элемента и распечатайте/верните другой, затем измените текущий статус элемента.
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
Вывод:
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