Advik Tripathi - 5 months ago 45
Python Question

# How do you divide a list (indefinite length) randomly into 3 subgroups?

Lets say that my program asks a user to input a number indefinitely and I appended it in a list.

``````#Given Example:
List = [105, 167, 262, 173, 123, 718, 219, 272, 132]
``````

what I wanted to do is to randomly pick any of the numbers so my sample output would be:

``````first = [105, 262, 173]
second = [167, 123, 132]
third = [718, 219,272]
``````

Having said, since the user input would be indefinite there will be chances that it would be an odd number.

I am currently using random.sample to choose a number from that list and append it in a list, after that I'll append the sub-groups of list to create a list within a list.

Would be a great help if anyone answers, thanks!

You could shuffle your list with `random.shuffle`:

``````>>> import random
>>> l = [105, 167, 262, 173, 123, 718, 219, 272, 132]
>>> random.shuffle(l)
>>> l
[167, 123, 173, 718, 262, 272, 105, 219, 132]
``````

And extract 3 sub-lists with slicing. The first list will have indices 0, 3 and 6 from the shuffled `l`, the second list will have indices 1, 4 and 7 and the third will have indices 2, 6 and 8:

``````>>> l[::3]
[167, 718, 105]
>>> l[1::3]
[123, 262, 219]
>>> l[2::3]
[173, 272, 132]
``````

As a bonus, it will work with lists of any length:

``````>>> l = [1, 2, 3, 4, 5]
>>> random.shuffle(l)
>>> [l[x::3] for x in range(3)]
[[2, 4], [1, 5], [3]]
``````

You can be sure that every element will appear exactly once in the nested lists.

You could also define more sublists:

``````>>> l = list(range(20))
>>> n = 5
>>> random.shuffle(l)
>>> [l[x::n] for x in range(n)]
[[5, 18, 9, 4], [11, 12, 1, 15], [13, 3, 6, 8], [17, 0, 14, 2], [10, 16, 7, 19]]
``````
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download