从排序的数字列表中选择n个随机数

时间:2013-08-19 21:39:35

标签: python

我按排序顺序列出了数字。 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)

1 个答案:

答案 0 :(得分:2)

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

  

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

>>> import random
>>> l = range(20)
>>> random.sample(l, 10)
[6, 15, 13, 3, 2, 4, 14, 17, 7, 10]