Kent Johnson wrote: > flamesrock wrote: > > Kind of a fun but confusing problem... > > > > I have two lists. Each list contains elements of two-element lists. > > l1 = [['c1',1],['c2',2],['c3',4]] > > l2 = [['c1',1],['c2',2],['c4',4],['c3',3]] > > > > Exactly in this format, where > > superlist[0][0] is always a string > > superlist[0][1] is always an integer > > > > Now what I would like to do is find the intersect of those two > > super-lists based on superlist[0][0] and then compare the integers > > to find ultimately: > > A list of strings of the intersect of l1/l2, where the l1[x][1] > > > l2[x][1] > > In the case of the above example, that would be simply: > > ['c3'] > > In [5]: l1 = [['c1',1],['c2',2],['c3',4]] > > In [6]: l2 = [['c1',1],['c2',2],['c4',4],['c3',3]] > > In [7]: d=dict(l1) > > In [10]: [k for k,v in l2 if k in d and v < d[k]] > Out[10]: ['c3'] > > Kent
The dict solution posted above is definitely better than the following, but purely out of idle curiosity I was interested to see if this could be done in one line using just list comprehensions ... Python 2.4.2 (#1, Nov 15 2005, 15:54:06) [GCC 3.3.6 (Gentoo 3.3.6, ssp-3.3.6-1.0, pie-8.7.8)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> l1 = [['c1',1],['c2',2],['c3',4]] >>> l2 = [['c1',1],['c2',2],['c4',4],['c3',3]] >>> [k2 for [k2,v2] in l2 if k2 in [k1 for k1,v1 in l1] and v2 < [v1 for k1,v1 in l1 if k1 == k2][0]] ['c3'] ... yup :-) Dave. -- -- http://mail.python.org/mailman/listinfo/python-list