我按排序顺序列出了数字。 There may be gaps between consecutive numbers
。我编写了以下代码来查找该列表中的50K随机数,但这需要花费太多时间。这有什么有效的版本吗?
def selectNrandomValsFromAList(mylist, n):
retval = []
randomchoice = random.choice
mylistremove = mylist.remove
retvalappend = retval.append
for i in range(n):
value = randomchoice(mylist)
mylistremove(value)
retvalappend(value)
return(retval)
mylist = range(2000000)
n =50000
selectNrandomValsFromAList(mylist,n)
答案 0 :(得分:2)
不要重新发明轮子。使用random.sample:
返回从总体中选择的k长度的唯一元素列表 序列。用于无需替换的随机抽样。
>>> import random
>>> l = range(20)
>>> random.sample(l, 10)
[6, 15, 13, 3, 2, 4, 14, 17, 7, 10]