2016-02-12 1 views
0

Есть ли способ «псевдо» - случайно выбрать элемент из списка, который не был выбран раньше? Я знаю о функции choice, которая возвращает случайный элемент из списка, но без учета предыдущих выбранных элементов. Я мог бы отслеживать, какие элементы уже были выбраны, и произвольно выбирать другой еще не выбранный элемент, но это может включать вложенные петли и т. Д.Псевдо-случайный выбор элемента из списка, только если он еще не выбран

Я также мог бы, например, удалить элемент, выбранный из списка на каждой итерации, но это тоже не очень хорошее решение.

Мой вопрос: есть ли «осведомленная» функция choice, которая выбирает только те элементы, которые ранее не были выбраны? Обратите внимание, что я не спрашиваю, как реализовать такую ​​функцию, но возможные решения, конечно же, хорошо приняты.

+3

Перемешать список и поп-элементы сверху. – khelwood

+2

Вы можете использовать 'random.sample' или' random.shuffle'. Для правильного ответа на ваш вопрос требуется больше контекста. –

+0

Да, я думаю, что я собираюсь «random.shuffle», так как в моем случае это не имеет значения, если исходный список изменен или нет, если другие решения не выходят. Благодаря! – nbro

ответ

0

Перемешать список и поп-элементы сверху. Это будет производить только каждый элемент списка один раз.

1

Как уже говорилось, вы можете перетасовать список, а затем использовать метод list.pop(). Вот пример:

>>> import random 
>>> mylist = range(5) 
>>> print(mylist) 
[0, 1, 2, 3, 4] 
>>> random.shuffle(mylist) 
>>> print(mylist) 
[4, 2, 5, 1, 3] 
>>> while len(mylist) > 0: 
...  print(mylist.pop()) 
... 
3 
1 
5 
2 
4 
>>> print(mylist) 
[] 
Смежные вопросы