On May 17, 11:08 am, Ruediger <[EMAIL PROTECTED]> wrote: > urikaluzhny wrote: > > It seems that I rather frequently need a list or iterator of the form > > [x for x in <> while <>] > > And there is no one like this. > > May be there is another short way to write it (not as a loop). Is > > there? > > Thanks > > I usually have the same problem and i came up with an solution like that: > > from operator import ne > def test(iterable, value, op=ne): > _n = iter(iterable).next > while True: > _x = _n() > if op(_x, value): > yield _x > else: > raise StopIteration
This is better written using takewhile... itertools.takewhile(lambda x: x != value, iterable) But if you really need to reinvent the wheel, perhaps this is simpler? def test(iterable, value, op=operator.ne): for x in iterable: if not op(x, value): return yield x -- Paul Hankin -- http://mail.python.org/mailman/listinfo/python-list