idiomatic way to take groups of n items from a list in Python?
iteration, python
Solution
From http://docs.python.org/library/itertools.html:
from itertools import izip_longest
def grouper(n, iterable, fillvalue=None):
"grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx"
args = [iter(iterable)] * n
return izip_longest(fillvalue=fillvalue, *args)
i = grouper(3,range(100))
i.next()
(0, 1, 2)
Problem
Given a list ``` A = [1 2 3 4 5 6] ``` Is there any idiomatic (Pythonic) way to iterate over it as though it were ``` B = [(1, 2) (3, 4) (5, 6)] ``` other than indexing? That feels like a holdover from C: ``` for a1,a2 in [ (A[i], A[i+1]) for i in range(0, len(A), 2) ]: ``` I can't help but feel there should be some clever hack using itertools or slicing or something. (Of course, two at a time is just an example; I'd like a solution that works for any n.) Edit: related Iterate over a string 2 (or n) characters at a time in Python but even the cleanest solution (accepted, using zip) doesn't generalize well to higher n without a list comprehension and *-notation.
Related problems
- How to iterate over a list in chunks
- Iterate over a string 2 (or n) characters at a time in Python
- How do I split a list into equally-sized chunks?
- Iteration over list slices
- Iterate over a python sequence in multiples of n?
- Iterate an iterator by chunks (of n) in Python?
- Iterate over a string 2 (or n) characters at a time in Python