Swapping 1 with 0 and 0 with 1 in a Pythonic way

Viewed 82531

In some part of my Python program I have a val variable that can be 1 or 0. If it's 1 I must change to 0, if it's 0 I must change to 1.

How do you do it in a Pythonic way?

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

it's too long!

I did:

swap = {0: 1, 1:0}

So I can use it:

swap[val]

Other ideas?

17 Answers

Here's a simple way:

val = val + 1 - val * 2

For Example:

If val is 0

0+1-0*2=1

If val is 1

1+1-1*2=0

I have swapped 0s and 1s in a list.

Here's my list:

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]

Another option:

val = (not val) * 1

After seeing all these simpler answers i thought of adding an abstract one , it's Pythonic though :

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

All we do is return the difference of 2 sets namely [0, 1] and [val] where val is either 0 or 1.

we use symmetric_difference() to create the set [0, 1] - [val] and pop() to assign that value to variable val.

use np.where

ex.

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

this gives 1 where val is 0 and gives 0 where val is anything else, in your case 1

EDIT: val has to be array

Related