First solutions I have found, not much tested beside the few doctests: from itertools import islice
def start_good1(alist, good_ones=4): """ Maybe more efficient for Python >>> start_good = start_good1 >>> start_good([0, 0, 1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) 4 >>> start_good([]) -1 >>> start_good([0, 0]) -1 >>> start_good([0, 0, 0]) -1 >>> start_good([0, 0, 0, 0, 1]) -1 >>> start_good([0, 0, 1, 0, 1, 2, 3]) -1 >>> start_good([0, 0, 1, 0, 1, 2, 3, 4]) 4 >>> start_good([0, 0, 1, 0, 1, 2, 3, 4, 5]) 4 >>> start_good([1, 2, 3, 4]) 0 >>> start_good([1, 2, 3]) -1 >>> start_good([0, 0, 1, 0, 1, 2, 0, 4]) -1 """ for i in xrange(len(alist) - good_ones + 1): if all(islice(alist, i, i+good_ones)): return i return -1 def start_good2(alist, good_ones=4): """ Maybe more efficient for Psyco >>> start_good = start_good2 >>> start_good([0, 0, 1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) 4 >>> start_good([]) -1 >>> start_good([0, 0]) -1 >>> start_good([0, 0, 0]) -1 >>> start_good([0, 0, 0, 0, 1]) -1 >>> start_good([0, 0, 1, 0, 1, 2, 3]) -1 >>> start_good([0, 0, 1, 0, 1, 2, 3, 4]) 4 >>> start_good([0, 0, 1, 0, 1, 2, 3, 4, 5]) 4 >>> start_good([1, 2, 3, 4]) 0 >>> start_good([1, 2, 3]) -1 >>> start_good([0, 0, 1, 0, 1, 2, 0, 4]) -1 """ n_good = 0 for i, el in enumerate(alist): if alist[i]: if n_good == good_ones: return i - good_ones else: n_good += 1 else: n_good = 0 if n_good == good_ones: return len(alist) - good_ones else: return -1 if __name__ == "__main__": import doctest doctest.testmod() print "Doctests done\n" Bye, bearophile -- http://mail.python.org/mailman/listinfo/python-list