Use sets:
>>> seen = set() >>> s1 = [x for x in a if x[0] not in seen and not seen.add(x[0])] >>> seen = set() >>> s2 = [x for x in b if x[0] not in seen and not seen.add(x[0])] >>> s1 [(1, 2), (2, 3), (4, 5)] >>> s2 [(5, 2), (6, 3), (4, 5), (1, 9)]
Union:
>>> from itertools import chain >>> seen = set() >>> [x for x in chain(s1,s2) if x[0] not in seen and not seen.add(x[0])] [(1, 2), (2, 3), (4, 5), (5, 2), (6, 3)]
Intersections:
>>> se1 = set(x[0] for x in s1) >>> se2 = set(x[0] for x in s2) >>> inter = se1 & se2 >>> inter set([1, 4]) >>> seen = set() >>> [x for x in chain(s1,s2) if x[0] in inter and x[0] not in seen and not seen.add(x[0])] [(1, 2), (4, 5)]
source share