remove a list from a list

John Henry john106henry at hotmail.com
Fri Nov 17 22:22:19 CET 2006


OK, if you don't care the resulting order, do it like:

class Convert2Dict:
    def __init__(self, data):
	self._data={}
	for x in data:
	    self._data[x.upper()]=x
    def get(self, key):
	return self._data[key.upper()]

a = ["a", "B"]
b = ["c", "a", "A", "D", "b"]
b_dict = Convert2Dict(b)

b = [b_dict.get(x) for x in list( set([x.upper() for x in b]) -
set([x.upper() for x in a]) ) ]


John Henry wrote:
> Scratch that.  b becomes all upper...
>
> John Henry wrote:
> > from sets import Set as set   # Python 2.3
> >
> > b = list( set([i.upper() for i in b) - set([i.upper() for i in a] ) )
> >
> >
> > Rares Vernica wrote:
> > > Yeah, I ended up doing a similar kind of loop. That is pretty messy.
> > >
> > > Is there any other way?
> > >
> > > Thanks,
> > > Ray
> > >
> > > Tim Chase wrote:
> > > >> That is a nice solution.
> > > >>
> > > >> But, how about modifying the list in place?
> > > >>
> > > >> That is, l would become ['c', 'D'].
> > > >>
> > > >>>  >>> e = ['a', 'b', 'e']
> > > >>>  >>> l = ['A', 'a', 'c', 'D', 'E']
> > > >>>  >>> s = set(e)
> > > >>>  >>> [x for x in l if x.lower() not in s]
> > > >>> ['c', 'D']
> > > >
> > > >
> > > > Well...changing the requirements midstream, eh? ;-)
> > > >
> > > > You can just change that last item to be a reassignment if "l" is
> > > > all you care about:
> > > >
> > > >  >>> l = [x for x in l ...]
> > > >
> > > > Things get a bit hairier if you *must* do it in-place.  You'd
> > > > have to do something like this (untested)
> > > >
> > > > for i in xrange(len(l), 0, -1):
> > > > 	if l[i-1].lower() in s:
> > > > 		del l[i-1]
> > > >
> > > >
> > > > which should do the job.
> > > > 
> > > > -tkc
> > > > 
> > > > 
> > > >




More information about the Python-list mailing list