Problem involving sets...

Dave Hughes dave at waveform.plus.com
Sat Apr 15 04:37:52 EDT 2006


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




More information about the Python-list mailing list