Подтвердить что ты не робот

Переключение 1 с 0 и 0 с 1 на питоновский путь

В какой-то части моей программы Python у меня есть переменная val, которая может быть 1 или 0. Если это 1, я должен измениться на 0, если это 0, я должен измениться на 1.

Как вы это делаете с помощью Pythonic?

if val == 1:
    val = 0
elif val == 0:
    val = 1

он слишком длинный!

Я сделал:

swap = {0: 1, 1:0}

Поэтому я могу использовать его:

swap[val]

Другие идеи?

4b9b3361

Ответ 1

Это не пифонический, но он нейтральный. Часто val = 1 - val является самым простым.

Ответ 2

Так как True == 1 и False == 0 в python,

вы можете просто использовать var = not var

Он просто заменит его.

Ответ 3

Самый короткий подход - использование побитового оператора XOR.

Если вы хотите переназначить val:

val ^= 1

Если вы не хотите переназначать val:

val ^ 1

Ответ 4

Еще одна возможность:

i = (1,0)[i]

Это хорошо работает, пока я положителен, поскольку dbr указал в комментариях, что он не сработает с ошибкой для я < 0.

Вы уверены, что не хотите использовать False и True? Это звучит почти так.

Ответ 5

В вашем случае я рекомендую тернар:

val = 0 if val else 1

Если у вас было 2 переменных для обмена, вы могли бы сказать:

(a, b) = (b, a)

Ответ 6

Чтобы расширить ответ на "ВАС" , используйте:

int(not(val))

Примеры:

>>> val = 0
>>> int(not(val))
1
>>> val = 1
>>> int(not(val))
0

Обратите внимание, что этот ответ предназначен только для описательной, а не для предписывающей.

Ответ 7

Если вы хотите быть коротким:

f = lambda val: 0 if val else 1

Тогда:

>>> f(0)
1
>>> f(1)
0

Ответ 8

(0,1) [not val] переворачивает значение val от 0 до 1 и наоборот.

Ответ 9

Самый пифонический путь, вероятно, будет

int(not val)

Но более короткий путь был бы

-~-val

Ответ 10

Функция с изменяемым аргументом. Вызов swaper() будет возвращать различное значение каждый раз.

def swaper(x=[1]):
    x[0] ^= 1
    return x[0]

Ответ 11

Еще один способ:

val = ~val + 2

Ответ 12

Твой путь хорошо работает!

Как насчет:

val = abs(val - 1)

короткий и простой!

Ответ 13

Увидев все эти более простые ответы, я подумал о добавлении абстрактного, хотя Pythonic:

val = set(range(0,2)).symmetric_difference(set(range(0 + val, val + 1))).pop()

Все, что мы делаем, это возвращаем разницу 2 наборов, а именно [0, 1] и [val], где val равен 0 или 1.

мы используем symbric_difference() для создания набора [0, 1] - [val] и pop() для присвоения этого значения переменной val.

Ответ 14

Я поменялся местами 0 и 1 в списке.

Вот мой список:

list1 = [1,0,0,1,0]

list1 = [i^1 for i in list1] 

 *#xor each element is the list*

print(list1)

So the outcome is: [0,1,1,0,1]

Ответ 15

используйте np.where

напр.

np.where(np.array(val)==0,1,0)

это дает 1, где val равен 0, и дает 0, где val это что-то еще, в вашем случае 1

ОБНОВЛЕНИЕ: val должен быть массив