# Boolean indices

In Python, not only is 0 False and 1 True, but True is 1 and False is 0. This means you can do weird things like:

```>>> a = 1
>>> (a==1) + (a>0) + (a==2)
2```

I'm not sure why you'd want to do this unless you wanted to count how many conditions had been met. More usefully, you can use a boolean test as an index for an array or tuple. For example, rather than write:

```if a % 2 == 0:
print "a is even"
else:
print "a is odd"```

You can write:

`print ("a is odd", "a is even")[a % 2 == 0]`

## Examples

An example of when I've found this trick useful is when I wanted to create a play/pause button. In response to a keystroke, I wanted flip the value of a boolean variable call 'paused': if it was currently True then it should becomes False, if it were False then it should become True. This can be achieve like so:

```paused = (True, False)[paused]
```

Another situation in which using a boolean test as a index might be useful is when you don't have the luxury of writing multiple lines of code, e.g. within a lambda function or list comprehension. For example:

```>>> my_list = [1, 7, 11, 8, 13, 2]
>>> [("odd","even")[i % 2 == 0] for i in my_list]
["odd","odd","odd","even","odd","even"]```

A more useful example would be to threshold a list of data:

`thresholded_data = [(0,1)[i > threshold] for i my_list]`

But in that situation, it's easier to just coerce the test into an integer:

`thresholded_data = [int(i > threshold) for i my_list]`