The most efficient option really depends on what it is you're actually going for. Another option here would be ternary operators, which can be chained up
this() if this else that() if that else those() if those else these() if these
Depending on your code and use, you might be able to refactor it to use the shorthand ternary operator as well
this or that
...which will do the first thing that evaluates to true, but doesn't leave room for a separate condition. However, you can add a separate condition with
test and this or that
such that test and this both need to evaluate to true or else 'that' is evaluated. If 'this' and 'that' are both truthy expressions, 'test' behaves like your case.
If you'd like, you can also use truthiness to index into a tuple....
(do_if_false, do_if_true)[test]
this one, to me, is less readable and more voodoo, but 'test' effectively evaluates to 0 or 1, returning the expression at that index. However, this will also evaluate all of the expressions, unless you took an extra step with:
(lambda: do_if_false, lambda: do_if_true)[test]