Home  >  Article  >  Backend Development  >  How to Split a List into Approximately Equal Parts?

How to Split a List into Approximately Equal Parts?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-18 05:55:02260browse

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!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn