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

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to