On Thu, Sep 16, 2010 at 12:49 PM, Vince Spicer <[email protected]> wrote:

>
>
> On Thu, Sep 16, 2010 at 12:27 PM, Michael Powe <[email protected]>wrote:
>
>> Hello,
>>
>> I have two lists.
>>
>> alist = ['label', 'guid']
>>
>> blist = ['column0label', 'column1label', 'dimension0guid',
>> 'description', 'columnid']
>>
>> I want to iterate over blist and extract the items that match my
>> substrings in alist; alternatively, throw out the items that aren't in
>> alist (but, I've had bad experiences removing items from lists "in
>> place," so I tend toward the "copy" motif.)
>>
>> In real life, blist column entries could have embedded column numbers
>> from 0 to 19.
>>
>> I can do this with excrutiatingly painful 'for' loops.  Looking for
>> something more efficient and elegant.
>>
>> Thanks.
>>
>> mp
>>
>> --
>> Michael Powe            [email protected]            Naugatuck CT USA
>>
>> "The secret to strong security: less reliance on secrets."
>> -- Whitfield Diffie
>>
>> _______________________________________________
>> Tutor maillist  -  [email protected]
>> To unsubscribe or change subscription options:
>> http://mail.python.org/mailman/listinfo/tutor
>>
>>
> Michel,
>
> One solution is to use list comprehensions.
>
> newlist = [x for x in blist if [a for a in alist if a in x]]
>
> This works, although there may be more efficient ways to accomplish this
>
> Vince
>
>
On major speed up is to make a simple filter that returns as soon as a match
is found instead of
completing the loop every element in alist

def filter_(x, against):
    for a in against:
        if a in x:
            return True
    return False

newlist = [x for x in blist if filter_(x, alist)]

:)

Vince
_______________________________________________
Tutor maillist  -  [email protected]
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to