尽管许多答案表明使用它random.shuffle(x)
并且x.pop()
在大数据上非常缓慢。10000
启用随机播放时,元素列表所需的时间6 seconds
。当随机播放被禁用时,速度是0.2s
测试了上述所有给定方法后最快的方法原来是由@jfs 编写的
import random
L = ['1',2,3,'4'...1000] #you can take mixed or pure list
i = random.randrange(len(L)) # get random index
L[i], L[-1] = L[-1], L[i] # swap with the last element
x = L.pop() # pop last element O(1)
为了支持我的主张,这里是这个来源的时间复杂度图表
如果列表中没有重复项,
您也可以使用集合来实现您的目的。一旦列表被设置为重复项,将被删除。remove by value
和remove random
成本O(1)
,即非常有效。这是我能想到的最干净的方法。
L=set([1,2,3,4,5,6...]) #directly input the list to inbuilt function set()
while 1:
r=L.pop()
#do something with r , r is random element of initial list L.
与lists
哪个支持A+B
选项不同,还sets
支持A-B (A minus B)
和。当您想要对数据执行逻辑操作时非常有用。A+B (A union B)
A.intersection(B,C,D)
选修的
如果您希望在列表的头部和尾部执行操作时加快速度,请使用 python dequeue(双端队列)来支持我的声明,这里是图像。一张图片就是千言万语。