Python 是否有用于创建大小为“n”的随机数列表的内置函数?

Python 是否有用于创建大小为“n”的随机数列表的内置函数?,python,list,random,Python,List,Random,创建随机数列表的标准方法是: def generateList(n): randlist = [] for i in range(n): randlist.append(random.randint(1,9)) return randlist 然而,我最近偶然发现了random.sample,它更紧凑: def generateList(n): return random.sample(range(1, 10), n) 但如果n大于10,则会导

创建随机数列表的标准方法是:

def generateList(n):
    randlist = []
    for i in range(n):
        randlist.append(random.randint(1,9))
    return randlist
然而,我最近偶然发现了random.sample,它更紧凑:

def generateList(n):
    return random.sample(range(1, 10), n)

但如果n大于10,则会导致错误。所以,我的问题是,是否存在一个内置函数,它完全按照我的意图运行而不会出错?如果没有,考虑到n可能相当大,是否至少有比第一个摘录更有效的替代方案?

否,没有专门用于此任务的功能。但是,如果要压缩代码,可以使用:

def generateList(n):
    return [randint(1, 9) for _ in range(n)]

我想你只需要试n次,每一次都是1号。您遇到错误的原因是示例不想重复数字:当您从10个元素的列表中请求12个唯一的数字时,它会阻塞。尝试:

def generateList(n, theList):
    return [random.sample(theList, 1) for _ in range(n)]

采样活动是从大小为N的样本空间中选择最多N个元素。这就是为什么会出现错误

尽管如此,有很多有效的方法来解决你的问题

我们可以简单地将代码包装在一个列表中,如下所示

def generateList(n):
    return [randint(1, 9) for i in range(n)]
def generateList(n):
    return [randrange(1, 10) for i in range(n)]
def generateList(n, sample_space = range(1, 10)):
    return [choice(sample_space) for i in range(n)]
用代替,像这样

def generateList(n):
    return [randint(1, 9) for i in range(n)]
def generateList(n):
    return [randrange(1, 10) for i in range(n)]
def generateList(n, sample_space = range(1, 10)):
    return [choice(sample_space) for i in range(n)]
如果可能的元素数量很少,您甚至可以这样使用

def generateList(n):
    return [randint(1, 9) for i in range(n)]
def generateList(n):
    return [randrange(1, 10) for i in range(n)]
def generateList(n, sample_space = range(1, 10)):
    return [choice(sample_space) for i in range(n)]
注意:由于n将变大,如果您使用的是Python2.7,请使用xrange而不是range。您可以阅读更多有关中差异的信息。

您误解了random。示例:请注意,random列表中的数字从未出现两次。生成列表的较短版本是lambda n:[randint1,9代表uin range]。