A and B but not C in list

Terry Reedy tjreedy at udel.edu
Sun Jan 23 19:35:13 EST 2011


On 1/23/2011 4:05 PM, CM wrote:
> In Python, is there a recommended way to write conditionals of the
> form:
>
> "if A and B but not C or D in my list, do something."  ?
>
> I may also have variations on this, like "if A but not B, C, or D".
>
> Do I have to just write out all the if and elifs with all possible
> conditions, or is there a handier and more code-maintainable way to
> deal with this?

The straightforward code

if a in L and b in L and c not in L and d not in L

scans the list 4 times. One scan be be done generically as follows:

def req_pro(iterable, required = set(), prohibited = set()):
     for item in iterable:
         if item in prohibited:
             return False
         elif item in required:
            required.remove(item)
     else:
         return not required # should now be empty

if req_pro(my_list, {A,B}, {C,D}): ...
# untested, of course..

-- 
Terry Jan Reedy




More information about the Python-list mailing list