Ответ 1
Это не пифонический, но он нейтральный. Часто val = 1 - val
является самым простым.
В какой-то части моей программы 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]
Другие идеи?
Это не пифонический, но он нейтральный. Часто val = 1 - val
является самым простым.
Так как True == 1
и False == 0
в python,
вы можете просто использовать var = not var
Он просто заменит его.
Самый короткий подход - использование побитового оператора XOR.
Если вы хотите переназначить val
:
val ^= 1
Если вы не хотите переназначать val
:
val ^ 1
Еще одна возможность:
i = (1,0)[i]
Это хорошо работает, пока я положителен, поскольку dbr указал в комментариях, что он не сработает с ошибкой для я < 0.
Вы уверены, что не хотите использовать False
и True
? Это звучит почти так.
В вашем случае я рекомендую тернар:
val = 0 if val else 1
Если у вас было 2 переменных для обмена, вы могли бы сказать:
(a, b) = (b, a)
Чтобы расширить ответ на "ВАС" , используйте:
int(not(val))
Примеры:
>>> val = 0
>>> int(not(val))
1
>>> val = 1
>>> int(not(val))
0
Обратите внимание, что этот ответ предназначен только для описательной, а не для предписывающей.
Если вы хотите быть коротким:
f = lambda val: 0 if val else 1
Тогда:
>>> f(0)
1
>>> f(1)
0
(0,1) [not val] переворачивает значение val от 0 до 1 и наоборот.
Самый пифонический путь, вероятно, будет
int(not val)
Но более короткий путь был бы
-~-val
Функция с изменяемым аргументом. Вызов swaper()
будет возвращать различное значение каждый раз.
def swaper(x=[1]):
x[0] ^= 1
return x[0]
Еще один способ:
val = ~val + 2
Твой путь хорошо работает!
Как насчет:
val = abs(val - 1)
короткий и простой!
Увидев все эти более простые ответы, я подумал о добавлении абстрактного, хотя 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.
Я поменялся местами 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]
используйте np.where
напр.
np.where(np.array(val)==0,1,0)
это дает 1, где val равен 0, и дает 0, где val это что-то еще, в вашем случае 1
ОБНОВЛЕНИЕ: val должен быть массив