创建随机数列表的标准方法是:
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
可能非常大)?
答案 0 :(得分:5)
不,没有专门用于此任务的功能。但是,如果要压缩代码,可以使用list comprehension:
def generateList(n):
return [randint(1, 9) for _ in range(n)]
答案 1 :(得分:4)
抽样活动是从大小为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)]
如果可能元素的数量很少,您甚至可以像这样使用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中了解有关差异的更多信息。
答案 2 :(得分:0)
我认为你只需要对它进行n次采样,每次都有1号尺寸。你遇到错误的原因是样本并不想重复数字:当你要求时来自10个元素列表的12个唯一数字,它会窒息。尝试:
def generateList(n, theList):
return [random.sample(theList, 1) for _ in range(n)]