Brian van den Broek wrote: > Ben Bush said unto the world upon 2005-11-14 05:51: > >> I have four lists: >> lisA=[1,2,3,4,5,6,9] >> lisB=[1,6,5] >> lisC=[5,6,3] >> lisD=[11,14,12,15] >> how can I write a function to compare lisB, lisC and lisD with lisA, >> if they >> share two continuous elements (the order does not matter), then return 1, >> otherwise return 0. For example, lisA, lisB and lisC have 5,6 or 6,5 so >> these comparison will return 1 but the comparison between lisD and lisA >> return 0. >> -- >> Thanks! >> Ben Bush > > > Hi Ben, > > the code below is tested no further than shown. And, I'm no expert -- I > imagine there are better ways. With luck, I'll learn them in a follow-up > from someone more skilled :-) > >>>> def list_common_continuity_comp(list1, list2): > for item in list1: > if item in list2: > if item + 1 in list1 and item + 1 in list2: > return True > return False >
[snip] That's potentially very expensive for large lists, although simply converting the lists to sets should give a significant speed up. I think the following is *possibly* as good a way as any. >>> def compare(list1, list2): intersection = sorted(list(set(list1) & set(list2))) for i in range(len(intersection) - 1): if intersection[i] == intersection[i+1] - 1: return True return False Duncan -- http://mail.python.org/mailman/listinfo/python-list