samedi 2 mai 2020

Draw samples of defined size until list is empty

I have a list of numbers mylist and want to draw from this list samples of size pair_size. The drawing of sample continues until mylist is empty.

My code works but is rather lengthy and complicated.

So my question is: How can I improve my solution to make it (i) more readable and (ii) also work for non consecutive pair_size?

import random

mylist = list(range(10000))
pair_size = [5,6,7]
pairs = []

while len(mylist) > (pair_size[0] + pair_size[-1]):

    n = random.choice(pair_size)
    pairs.append(mylist[:n])
    mylist = mylist[n:]

    if len(mylist) in pair_size: 

         pairs.append(mylist)

    else:

        if (len(mylist) - pair_size[0]) in pair_size:
            l1,l2 = mylist[:pair_size[0]], mylist[pair_size[0]:]
            pairs.append(l1)
            pairs.append(l2)
        elif (len(mylist) - pair_size[-1]) in pair_size:
            l1,l2 = mylist[:pair_size[-1]], mylist[pair_size[-1]:]
            pairs.append(l1)
            pairs.append(l2)
        elif (len(mylist) - pair_size[1]) in pair_size:
            l1,l2 = mylist[:pair_size[1]], mylist[pair_size[1]:]
            pairs.append(l1)
            pairs.append(l2)
        else:
            raise ValueError("Pair_size must contain consecutive numbers")    




Aucun commentaire:

Enregistrer un commentaire