Python Forum
iterate N elements at a time
Thread Rating:
  • 1 Vote(s) - 1 Average
  • 1
  • 2
  • 3
  • 4
  • 5
iterate N elements at a time
#1
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?
Tradition is peer pressure from dead people

What do you call someone who speaks three languages? Trilingual. Two languages? Bilingual. One language? American.
Reply
#2
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
>>>
Reply
#3
i want to get all N elements (as a list or tuple) each time i iterate N items at a time.
Tradition is peer pressure from dead people

What do you call someone who speaks three languages? Trilingual. Two languages? Bilingual. One language? American.
Reply
#4
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)
Almost dead, but too lazy to die: https://sourceserver.info
All humans together. We don't need politicians!
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  ValueError: Length mismatch: Expected axis has 8 elements, new values have 1 elements ilknurg 1 5,186 May-17-2022, 11:38 AM
Last Post: Larz60+
  Sorting Elements via parameters pointing to those elements. rpalmer 3 2,631 Feb-10-2021, 04:53 PM
Last Post: rpalmer

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020