I'd say
chunks = [data[x:x+100] for x in range(0, len(data), 100)]
If you are using python 2.x instead of 3.x, you can be more memory-efficient by using xrange(), changing the above code to:
chunks = [data[x:x+100] for x in xrange(0, len(data), 100)]
Answer from DanRedux on Stack OverflowI'd say
chunks = [data[x:x+100] for x in range(0, len(data), 100)]
If you are using python 2.x instead of 3.x, you can be more memory-efficient by using xrange(), changing the above code to:
chunks = [data[x:x+100] for x in xrange(0, len(data), 100)]
Actually I think using plain slices is the best solution in this case:
for i in range(0, len(data), 100):
chunk = data[i:i + 100]
...
If you want to avoid copying the slices, you could use itertools.islice(), but it doesn't seem to be necessary here.
The itertools() documentation also contains the famous "grouper" pattern:
def grouper(n, iterable, fillvalue=None):
"grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx"
args = [iter(iterable)] * n
return izip_longest(fillvalue=fillvalue, *args)
You would need to modify it to treat the last chunk correctly, so I think the straight-forward solution using plain slices is preferable.
Split list into smaller lists
python - Slicing a list into a list of sub-lists - Stack Overflow
How to Split a Python List or Iterable Into Chunks – Real Python
How to split a list at every certain element?
Hi all! I will kick myself when you tell me how to do this, but I'm stumped, how do I split the following list into smaller lists, where 'x' is the separator. In other words, there will be 3 new lists not containing 'x'
myList = ['one', 'two', 'x', 'three', 'x', 'four', 'five']
bonus question, when I try (infinite) while loops on the above in Sublime, ctr+c doesn't seem to stop the process--I have to go into activity monitor to kill the process with my fan going crazy. OSX
Thank you!
[input[i:i+n] for i in range(0, len(input), n)] # Use xrange in py2k
where n is the length of a chunk.
Since you don't define what might happen to the final element of the new list when the number of elements in input is not divisible by n, I assumed that it's of no importance: with this you'll get last element equal 2 if n equal 7, for example.
The documentation of the itertools module contains the following recipe:
import itertools
def grouper(n, iterable, fillvalue=None):
"grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx"
args = [iter(iterable)] * n
return itertools.izip_longest(fillvalue=fillvalue, *args)
This function returns an iterator of tuples of the desired length:
>>> list(grouper(2, [1,2,3,4,5,6,7]))
[(1, 2), (3, 4), (5, 6), (7, None)]