A and B but not C in list
Arnaud Delobelle
arnodel at gmail.com
Wed Jan 26 03:10:23 EST 2011
Terry Reedy <tjreedy at 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
More information about the Python-list
mailing list