Python Forum
iterate N elements at a time - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: General Coding Help (https://python-forum.io/forum-8.html)
+--- Thread: iterate N elements at a time (/thread-12022.html)



iterate N elements at a time - Skaperen - Aug-06-2018

i have a long iterator. i would like to iterate N elements at a time instead of 1 at a time. this is not an iterator of iterators; it is flat such as an iterator of ints, or an immutable type i am not going to iterate over, here, like a string. in most use cases i will know at the time of coding what N is (very often will be 2 or 3). in other use cases, N will not be known until run time. N will never change over the course of iterating; it will be known when the iterating begins. how can i iterate over an iterator N elements at a time?


RE: iterate N elements at a time - Larz60+ - Aug-06-2018

something like this?:
>>> from itertools import islice
>>> loops = iter(range(10))
>>> for i in loops:
...     print(i)
...     next(islice(loops, n, n), None)
... 
0
3
6
9
>>>



RE: iterate N elements at a time - Skaperen - Aug-07-2018

i want to get all N elements (as a list or tuple) each time i iterate N items at a time.


RE: iterate N elements at a time - DeaD_EyE - Aug-07-2018

def chunker(iterable, chunksize):
    return zip(*[iter(iterable)] * chunksize)

def chunker_longest(iterable, chunksize):
    return itertools.zip_longest(*[iter(iterable)] * chunksize)
for chunk in chunker_longest(range(101), 10):
    print(chunk)
Output:
(0, 1, 2, 3, 4, 5, 6, 7, 8, 9) (10, 11, 12, 13, 14, 15, 16, 17, 18, 19) (20, 21, 22, 23, 24, 25, 26, 27, 28, 29) (30, 31, 32, 33, 34, 35, 36, 37, 38, 39) (40, 41, 42, 43, 44, 45, 46, 47, 48, 49) (50, 51, 52, 53, 54, 55, 56, 57, 58, 59) (60, 61, 62, 63, 64, 65, 66, 67, 68, 69) (70, 71, 72, 73, 74, 75, 76, 77, 78, 79) (80, 81, 82, 83, 84, 85, 86, 87, 88, 89) (90, 91, 92, 93, 94, 95, 96, 97, 98, 99) (100, None, None, None, None, None, None, None, None, None)