Pythonic way of saying 'at least one of a, b, or c is in some_list'

Chris Rebert clp2 at rebertia.com
Thu Oct 28 13:05:35 EDT 2010


On Thu, Oct 28, 2010 at 9:33 AM, cbrown at cbrownsystems.com
<cbrown at cbrownsystems.com> wrote:
> On Oct 28, 9:23 am, John Posner <jjpos... at optimum.net> wrote:
>> On 10/28/2010 12:16 PM, cbr... at cbrownsystems.com wrote:
>>
>> > It's clear but tedious to write:
>>
>> > if 'monday" in days_off or "tuesday" in days_off:
>> >      doSomething
>>
>> > I currently am tending to write:
>>
>> > if any([d for d in ['monday', 'tuesday'] if d in days_off]):
>> >      doSomething
>>
>> > Is there a better pythonic idiom for this situation?
>>
>> Clunky, but it might prompt you to think of a better idea: convert the
>> lists to sets, and take their intersection.
>>
>> -John
>
> I thought of that as well, e.g.:
>
> if set(["monday,"tuesday']).intersection(set(days_off)):
>    doSomething
>
> but those extra recasts to set() make it unaesthetic to me; and worse

Why not make days_off a set in the first place? Isn't it,
conceptually, a set of days off?

> if not set(["monday,"tuesday']).isdisjoint(set(days_off)):
>    doSomething
>
> is bound to confuse most readers.

This way is more straightforward:

if set(["monday", "tuesday"]) & days_off:

Cheers,
Chris
--
http://blog.rebertia.com



More information about the Python-list mailing list