【发布时间】:2012-04-20 08:12:40
【问题描述】:
假设我有一个长度未知的列表x,我想从中随机弹出一个元素,以便列表之后不包含该元素。最pythonic的方法是什么?
我可以使用 pop、random.randint 和 len 的相当不方便的组合来做到这一点,并且希望看到更短或更好的解决方案:
import random
x = [1,2,3,4,5,6]
x.pop(random.randint(0,len(x)-1))
我想要实现的是从列表中连续弹出随机元素。 (即,随机弹出一个元素并将其移动到字典中,随机弹出另一个元素并将其移动到另一个字典中,...)
请注意,我使用的是 Python 2.6,并没有通过搜索功能找到任何解决方案。
【问题讨论】:
-
我不是 Python 达人,但这对我来说确实不错。
-
我已经进行了详细的时间复杂度分析,请稍后查看我的答案。随机播放效率不高!但是如果您需要以某种方式更改项目的顺序,您仍然可以使用。如果 pop(0) 与您有关,请使用我的分析中提到的 dequeue。
-
我写的答案的时间复杂度为 O(2)。将其包装在一个函数中以便快速使用。请注意,除了 list.pop(-1) 之外的任何 list.pop(n) 都需要 O(n)。