On Mar 17, 5:42 pm, Paul Rubin <http://[EMAIL PROTECTED]> wrote: > Steven D'Aprano <[EMAIL PROTECTED]> writes: > > or even > > > len(filter(lambda t, y=y: y>t, x)) > > How about > > min(i for i,t in enumerate(x) if t >= y) > > or > > max(i for i,t in enumerate(x) if t <= y) > > Those are actually pretty direct.
I'd hate to see "indirect". Worse, the min-using gizmoid crashes when y > x[-1] -- all your ifs are belong to False. >>> x [0, 100, 200, 1000] >>> tests = [0, 1, 100, 150, 1000, 2000] >>> [(y, max(i for i,t in enumerate(x) if t <= y)) for y in tests] [(0, 0), (1, 0), (100, 1), (150, 1), (1000, 3), (2000, 3)] Looks OK, iff one is happy with the OP's strange usage of "insert point". >>> xc = x[:] >>> xc.insert(1, 150) >>> xc [0, 150, 100, 200, 1000] Whoops. Try this for size: >>> [(y, sum(t <= y for t in x)) for y in tests] [(0, 1), (1, 1), (100, 2), (150, 2), (1000, 4), (2000, 4)] Cheers, John -- http://mail.python.org/mailman/listinfo/python-list