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

Is there a built-in function for creating a list of random numbers of size 'n'?

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

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 可能非常大)?

不,没有专门用于此任务的函数。但是如果你想压缩代码,你可以使用 list comprehension

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)]

抽样的activity是从大小N的样本space中最多select个元素N。这就是您收到错误的原因。

话虽如此,有很多有效的方法可以解决您的问题。

  1. 我们可以简单地将您的代码包装在列表理解中,就像这样

    def generateList(n):
        return [randint(1, 9) for i in range(n)]
    
  2. 使用randrange instead of randint,像这样

    def generateList(n):
        return [randrange(1, 10) for i in range(n)]
    
  3. 如果可能的元素个数很少,甚至可以这样用choice

    def generateList(n, sample_space = range(1, 10)):
        return [choice(sample_space) for i in range(n)]
    

注意:由于n会变大,如果您使用Python 2.7,请使用xrange而不是range.您可以在 this answer.

中阅读更多关于差异的信息