jeudi 9 mars 2017

More efficient shuffling during repeated iterations

I need to iterate over a list an arbitrary number of times, yielding each element of the list in random order (a different order each time I iterate through the full list). I need to yield each element once before yielding that element a second time, yield each element twice before yielding that element a third time, etc.

Currently, my code looks like this:

def random_yield(data):
  random.shuffle(data)
  data_index = 0
  while True:
    yield data[data_index]
    data_index += 1

    if data_index == len(data):
      random.shuffle(data)
      data_index = 0

Is there a way to do this more efficiently so I don't pay the performance penalty of the random.shuffle() after every len(data) yields?

Aucun commentaire:

Enregistrer un commentaire