1

我有一个按排序顺序排列的数字列表。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)
4

1 回答 1

2

不要重新发明轮子。使用random.sample

返回从总体序列中选择的唯一元素的 ak 长度列表。用于无放回的随机抽样。

>>> import random
>>> l = range(20)
>>> random.sample(l, 10)
[6, 15, 13, 3, 2, 4, 14, 17, 7, 10]
于 2013-08-19T21:41:29.390 回答