On 2011-08-16, nn <prueba...@latinmail.com> wrote: > That can be easily fixed: > >>>> def sublist(lst1, lst2): > s1 = ','.join(map(str, lst1)) > s2 = ','.join(map(str, lst2)) > return False if s2.find(s1)==-1 else True > >>>> sublist([1,2,3],[1,2,3,4,5]) > True >>>> sublist([1,2,2],[1,2,3,4,5]) > False >>>> sublist([1,2,3],[1,3,5,7]) > False >>>> sublist([12],[1,2]) > False >>>>
String conversion is risky: >>> sublist(['1,2', '3,4'], [1, 2, 3, 4]) True Since we're bike-shedding, here's my entry. It's not clear to me if accepting iterables rather than lists is a win, but I thought, "Why not be general if the implementation is easy?" def is_subseq_of(x, y): r"""Return True if the elements in iterable x are found contiguously in iterable y. >>> is_subseq_of([], []) True >>> is_subseq_of([], [1, 2, 3]) True >>> is_subseq_of([1], [1, 2, 3]) True >>> is_subseq_of([1], []) False >>> is_subseq_of([4, 5], [1, 2, 3, 4, 5]) True >>> is_subseq_of([1, 2], [1, 3, 2]) False >>> is_subseq_of([2, 3], [1, 2, 3, 4]) True >>> is_subseq_of([1, 2, 2], [1, 2, 3, 4, 5]) False >>> is_subseq_of([1, 2], [1, 2]) True >>> is_subseq_of([1, 2, 3], [1, 2]) False >>> is_subseq_of(['1,2', '3,4'], [1, 2, 3, 4]) False """ x = tuple(x) ix = 0 lenx = len(x) if lenx == 0: return True for elem in y: if x[ix] == elem: ix += 1 else: ix = 0 if ix == lenx: return True return False if __name__ == '__main__': import doctest doctest.testmod() -- Neil Cerutti -- http://mail.python.org/mailman/listinfo/python-list