On Jan 31, 4:12 pm, erikcw <[EMAIL PROTECTED]> wrote: > Hi, > > I have a list of numbers each with a +/- margin of error. I need to > identify which ones overlab each other. > > For example: > 55 +/- 3 > 20 +/- 2 > 17 +/- 4 > 60 +/- 3 > > #base, max, min > list = [ > (55, 58, 52), > (20, 22, 18), > (17, 21, 13), > (60, 63, 57), > ] > > In this example the range of list[0] overlaps the range of list[3] AND > list[1] overlaps list[2] > > What is the best way to in python to identify the list items that > overlap and the items that don't overlap with any other.
This is definitely the best way: ======================= lst = [ (55, 58, 52), (20, 22, 18), (17, 21, 13), (60, 63, 57), ] from itertools import chain def overlaps(lst): bounds = chain(*(((x[1],i), (x[2], i)) for i,x in enumerate(lst))) inside = {} for x, i in sorted(bounds): if inside.pop(i, None) is None: for j, y in inside.iteritems(): if y != x: yield i, j inside[i] = x ============================== >>> list(overlaps(lst)) [(1, 2), (3, 0)] -- Arnaud -- http://mail.python.org/mailman/listinfo/python-list