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