pythonpython-3.xwhile-loopiteratorgenerator

how to use iterator in while loop statement in python


Is it possible to use a generator or iterator in a while loop in Python? For example, something like:

i = iter(range(10))
while next(i):
    # your code

The point of this would be to build iteration into the while loop statement, making it similar to a for loop, with the difference being that you can now additional logic into the while statement:

i = iter(range(10))
while next(i) and {some other logic}:
    # your code

It then becomes a nice for loop/while loop hybrid.

Does anyone know how to do this?


Solution

  • In Python >= 3.8, you can do the following, using assignment expressions:

    i = iter(range(10))
    while (x := next(i, None)) is not None and x < 5:
        print(x)
    

    In Python < 3.8 you can use itertools.takewhile:

    from itertools import takewhile
    
    i = iter(range(10))
    for x in takewhile({some logic}, i):
        # do stuff
    

    "Some logic" here would be a 1-arg callable receciving whatever next(i) yields:

    for x in takewhile(lambda e: 5 > e, i):
        print(x)
    0
    1
    2
    3
    4