About the first one, you are forbidding `num=0` in this case:
```
def boring_select(num=3):
    # first condition is always False (why not)
    cond1 = np.zeros(num, dtype=bool)
    # second condition is always True...
    cond2 = np.ones(num, dtype=bool)
    # Our data is pretty boring:
    data = np.zeros(num)
    return np.select([cond1, cond2], [data, data])
```
The result here is always `np.zeros(num)`, and this also makes sense for `num=0`. A similar example is `arr = np.random.random(0); print arr[arr > 0.5]`. It is well defined- There is no element greater 0.5 in an empty array.

What should happen if condlist has length 0 is another thing. Currently you get the default back, your function actually explicitly returns `np.array([])` right now. I think I could be convinced that this should be an error. Otherwise we could say that `default` is always a choice that is left, which I guess is what would happen if we don't do anything at all and I like having no extra logic :).