Каков наиболее эффективный способ переключения между 0
и 1
?
python
python-3.x
codeforester
источник
источник
Ответы:
Решение с использованием NOT
Если значения являются логическими, самым быстрым подходом является использование оператора not :
Решение с использованием вычитания
Если значения числовые, то вычитание из суммы - это простой и быстрый способ переключения значений:
Решение с использованием XOR
Если значение переключается между 0 и 1 , вы можете использовать побитовое исключающее ИЛИ :
Техника распространяется на любую пару целых чисел. Шаг xor-by-one заменяется на xor-by-precomputed-constant:
(Эта идея была предложена Ником Когланом, а затем обобщена @zxxc.)
Решение с использованием словаря
Если значения хешируются, вы можете использовать словарь:
Решение с использованием условного выражения
Самый медленный способ - использовать условное выражение :
Решение с использованием itertools
Если у вас более двух значений, функция itertools.cycle () предоставляет общий быстрый способ переключения между последовательными значениями:
Обратите внимание, что в Python 3
next()
метод был изменен на__next__()
, поэтому первая строка теперь будет записана какtoggle = itertools.cycle(['red', 'green', 'blue']).__next__
источник
.next()
был заменен глобальнойnext()
функцией. Приведенный выше пример будет выглядеть так:toggle = itertools.cycle(...); next(toggle)
toggle = itertools.cycle(['red', 'green', 'blue'])
next(toggle)
a
иb
использованиемx = x ^ (a ^ b)
.int(not 0)
иint(not 1)
... хмммЯ всегда использую:
Если p является логическим, это переключается между истиной и ложью.
источник
p
не нужно ссылаться дважды, чтобы этот метод работал !! Идея, если вы переключаете значение с длинной длинной ссылкой.^=
- побитовое присвоение xorВот еще один не интуитивный способ. Прелесть в том, что вы можете перебирать несколько значений, а не только два [0,1]
Для двух значений (переключение)
Для нескольких значений (скажем, 4)
Я тоже не ожидал, что это решение будет чуть ли не самым быстрым
источник
not
Оператор отрицает переменную (превращая его в логическое значение , если оно уже не один). Вероятно, вы можете использовать1
и0
взаимозаменяемо сTrue
иFalse
, поэтому просто отрицайте его:Но если вы используете два произвольных значения, используйте встроенный
if
:источник
toggle = 0 if toggle else 1
короче и более общийif
для переключения между двумя произвольными переменными, а не только1
и0
.Только между 1 и 0, сделайте это
x может принимать 1 или 0
источник
True
иFalse
на самом деле являются целыми числами, хотя и с удивительно подробным__str__()
методом,x
также могут бытьTrue
илиFalse
здесь. Тем не менее, вы получите 1 или 0 обратно.Тригонометрический подход , просто потому что
sin
иcos
функции классные.источник
Удивительно, но никто не упомянул старое доброе деление по модулю 2:
Обратите внимание, что это эквивалентно
x = x - 1
, но преимущество метода по модулю состоит в том, что размер группы или длина интервала могут быть больше, чем всего 2 элемента, что дает вам аналогичную циклической схеме чередования.Теперь только для 2 переключение может быть немного короче (с использованием побитового оператора):
источник
один из способов переключения - использование множественного назначения
Используя itertools:
источник
Самый простой способ переключаться между 1 и 0 - вычесть из 1.
источник
Использование обработчика исключений
Хорошо, я худший:
источник
Как насчет воображаемого переключателя, который хранит не только текущий переключатель, но и пару других связанных с ним значений?
Сохраните любое значение + или - слева и любое значение без знака справа:
Ноль тоже работает:
Легко получить текущее значение переключения (
True
иFalse
представить + и -), LHS (реальное) значение или RHS (мнимое) значение:Легко поменять местами LHS и RHS (но учтите, что знак обоих значений не должен иметь значения):
Легко меняйте местами LHS и RHS, а также переключайтесь одновременно:
Защита от ошибок:
Внесите изменения в LHS и RHS:
... но будьте осторожны, манипулируя RHS:
источник
Переменные a и b могут иметь ЛЮБЫЕ два значения, например, 0 и 1, или 117 и 711, или «орел» и «решка». Никаких математических вычислений не используется, только быстрая замена значений каждый раз, когда требуется переключение.
источник
Я использую функцию абс, очень полезную в циклах
x будет 0.
источник
Давайте сделаем взлом кадра. Переключить переменную по имени. Примечание. Это может работать не во всех средах выполнения Python.
Скажем, у вас есть переменная "x"
источник
Если вы имеете дело с целочисленной переменной, вы можете увеличить на 1 и ограничить свой набор значениями 0 и 1 (мод)
источник
Переключение между -1 и +1 может быть получено встроенным умножением; используется для вычисления числа Пи способом Лейбница (или аналогичным):
источник
Вы можете использовать из
index
вlist
с.Плюсы : Отсутствие дополнительных библиотек, самостоятельный поясняющий код и работа с произвольными типами данных.
Минусы : нет дубликата-сохранения.
toggleValues(["one","two","duped", "three", "duped", "four"], "duped")
всегда вернусь"three"
источник