Let's break down the expression:
('e' or 'a') will first check if 'e' is True. If it is, the expression will return 'e'. If not, it will return 'a'.
Since all non-empty strings returns True, this expression will always return 'e'. This means that if ('e' or 'a') in L: can be translated to if 'e' in L, which in this case is False.
A more generic way to check if a list contains at least one value of a set of values, is to use the any function coupled with a generator expression.
if any(c in L for c in ('a', 'e')):