2016-02-12 81 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) 
[]