[Tutor] Comparing two lists

Michael Powe michael at trollope.org
Thu Sep 16 21:19:33 CEST 2010

On Thu, Sep 16, 2010 at 12:59:08PM -0600, Vince Spicer wrote:
> On Thu, Sep 16, 2010 at 12:49 PM, Vince Spicer <vince at vinces.ca> wrote:

> > On Thu, Sep 16, 2010 at 12:27 PM, Michael Powe <michael at trollope.org>wrote:

> >> 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.)

> > 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

> 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)]


Very cool, thanks.

I've used list comprehensions before but I just couldn't get the
structure right this time, for some reason.



Michael Powe		michael at trollope.org		Naugatuck CT USA
"No provision in our Constitution ought to be dearer to man than that
which protects the rights of conscience against the enterprises of the
civil authority." -- Thomas Jefferson to New London Methodists,
1809. ME 16:332
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 197 bytes
Desc: not available
URL: <http://mail.python.org/pipermail/tutor/attachments/20100916/bec53454/attachment-0001.pgp>

More information about the Tutor mailing list