iterating over a list as if it were a circular list
Alexander Blinne
news at blinne.net
Thu Mar 7 18:49:04 EST 2013
Am 07.03.2013 10:27, schrieb Sven:
> Now I would like to iterate over P and place one N at each point.
> However if you run out of N I'd like to restart from N[0] and carry on
> until all the points have been populated.
> So far I've got (pseudo code)
>
> i = 0
> for point in points:
> put N[i] at point
> if i > len(N):
> i = 0
>
> is this the most pythonic way to accomplish this?
Sounds like
http://docs.python.org/3/library/itertools.html#itertools.repeat
to me.
> Additionally, what if I wanted to pull a random element from N, but I
> want to ensure all elements from N have been used before starting to
> pick already chosen random elements again.
> So far I thought of duplicating the list and removing the randomly
> chosen elements from the list, and when it's empty, re-copying it. But
> that seems a little "wrong" if you know what I mean.
This can be done with
http://docs.python.org/3/library/random.html#random.shuffle
untested:
import random
def repeated_random_permutation(iterable):
pool = list(iterable)
while True:
random.shuffle(pool)
yield from pool
Greetings
More information about the Python-list
mailing list