Here is a quick and dirty greedy approach that should work well.
First, decide how many lists you will wind up with. Call that m
.
Break your objects into groups of m
, with the one possibly smaller group being the values closest to 0.
Order your groups by descending difference between the biggest and the smallest.
Assign your groups to your lists, with the largest object going into the group with the lowest total, the next largest the next lowest, and so on.
When you are done, you will have lists of the right size, with relatively small differences.
(You can do better than this with dynamic programming. But it will also be harder to write. How to constrain items with multiple randomly selected positions so that the average position for each is within a certain range may give you some ideas about how to do that.)