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
