2016-02-12 79 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) 
[] 
相关问题