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 > > > > > > > > > > > > -- http://mail.python.org/mailman/listinfo/python-list