是否有用于创建大小为 '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
。这就是您收到错误的原因。
话虽如此,有很多有效的方法可以解决您的问题。
我们可以简单地将您的代码包装在列表理解中,就像这样
def generateList(n):
return [randint(1, 9) for i in range(n)]
使用randrange
instead of randint
,像这样
def generateList(n):
return [randrange(1, 10) for i in range(n)]
如果可能的元素个数很少,甚至可以这样用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.
中阅读更多关于差异的信息
创建随机数列表的标准方法是:
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
。这就是您收到错误的原因。
话虽如此,有很多有效的方法可以解决您的问题。
我们可以简单地将您的代码包装在列表理解中,就像这样
def generateList(n): return [randint(1, 9) for i in range(n)]
使用
randrange
instead ofrandint
,像这样def generateList(n): return [randrange(1, 10) for i in range(n)]
如果可能的元素个数很少,甚至可以这样用
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.