intersection of 2 list of pairs

James Stroud jstroud at mbi.ucla.edu
Sun Feb 20 23:18:15 EST 2005


Learned list comprehension today, its cool:


>>> E1=[('a','g'),('r','s')]
>>> E2=[('g','a'),('r','q'),('f','h')]
>>> [x for x in E1 for y in E2 if x == y or (x[1],x[0])==y]
[('a', 'g')]




On Sunday 20 February 2005 09:24 am, les_ander at yahoo.com wrote:
> Hi,
> I have 2 lists of tuples that look like:
> E1=[('a','g'),('r','s')] and
> E2=[('g','a'),('r','q'),('f','h')].
> In this tuple, the ordering does not
> matter, i.e. (u,v) is the same as (v,u).
>
> What I want to do is the following:
> given 2 list of tuples, E1 and E2, I want to create another list with
> tuples that are common to both. So in the above example I would like
> to return ('a','g') as being common.
> So far I have the code below but it does not work out properly, I would
> be grateful if someone can help me out .
> thanks
>
> def list_of_tuples_intersect(E1,E2):
>
> 	S1=Set()
> 	S2=Set()
> 	for e in E1:
> 		S1.add((e[0],e[1]))
> 		S1.add((e[1],e[0]))
> 	for e in E2:
> 		S2.add((e[0],e[1]))
> 		S2.add((e[1],e[0]))
> 	S= S1 & S2
> 	SS=Set()
> 	done=Set()
>
> 	for e in S:
> 		if ((e[0],e[1])  in done) or ((e[1],e[0])  in done):
> 			continue
> 		else:
> 			SS.add((e[0],e[1]))
> 			done.add((e[0],e[1]))
> 			done.add((e[1],e[0]))
> 	return SS

-- 
James Stroud, Ph.D.
UCLA-DOE Institute for Genomics and Proteomics
Box 951570
Los Angeles, CA 90095



More information about the Python-list mailing list