Terry Reedy <tjre...@udel.edu> writes: > 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..
But what's better? Four fast list scans or one slow one? -- Arnaud -- http://mail.python.org/mailman/listinfo/python-list