Home > Article > Backend Development > How to Split a List into Approximately Equal Parts?
Splitting a List into N Approximately Equal Parts
Dividing a list into equal parts is a common programming problem. One particular challenge is achieving an even split when the list length is not divisible by the desired number of parts.
For instance, consider splitting a list of 7 elements into two equal parts. Ideally, each part should have 3 and 4 elements respectively.
The provided code, chunks(), divides the list into equal-sized chunks of elements, but this may not result in an even split. Alternatively, transposing the chunks could achieve an even split, but it would disrupt the element ordering.
A more efficient approach is to use a list generator, as demonstrated in the improved code:
def split(a, n): k, m = divmod(len(a), n) return (a[i*k+min(i, m):(i+1)*k+min(i+1, m)] for i in range(n))
This code calculates the ideal chunk size k and the remaining elements m. It then yields a generator that iterates through the list and creates parts of the desired size.
For example:
>>> list(split(range(11), 3)) [[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10]]
This solution provides an efficient method for splitting a list into approximately equal parts, preserving the element order.
The above is the detailed content of How to Split a List into Approximately Equal Parts?. For more information, please follow other related articles on the PHP Chinese website!