有没有一个内置函数可以创建一个大小为'n'的随机数列表?

3
创建随机数列表的标准方式是:
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可能很大)?


3
你误解了 random.sample:请注意,随机列表中的数字从未重复出现。generateList 的较短版本是 lambda n: [randint(1,9) for _ in range(n)] - Alec
3个回答

5
没有专门用于此任务的函数。但是,如果您想压缩代码,可以使用列表推导式:列表推导式
def generateList(n):
    return [randint(1, 9) for _ in range(n)]

4

抽样的活动是从大小为N的样本空间中选择最多N个元素。这就是你收到错误信息的原因。

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

  1. We can simply wrap your code in a list comprehension, like this

    def generateList(n):
        return [randint(1, 9) for i in range(n)]
    
  2. Use randrange instead of randint, like this

    def generateList(n):
        return [randrange(1, 10) for i in range(n)]
    
  3. If the number of possible elements is small, you can even use choice like this

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

注意:由于n将会很大,如果您正在使用Python 2.7,请使用xrange代替range。您可以在此答案中了解更多差异。


0

我认为你只能对其进行n次采样,每次采样大小为1。你遇到错误的原因是样本不想重复数字:当您要求从包含10个元素的列表中获取12个唯一数字时,它会出错。请尝试:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接