Generate X random integers between Y and Z?
例如,在python中是否有一个函数(我正在使用sagemath)来获取10个介于0和30之间的随机整数,而不重复它们?
- 在这里查看:stackoverflow.com/questions/3996904/…
- @对于记录,这不是生成0到9之间的随机整数的副本,因为生成多个唯一值是一个有意义的不同问题。也就是说,从一个特定范围生成一组排序后的随机数是相同的,但它也希望对值进行排序(并且可以很容易地忽略该步骤)。
1 2
| import random
random.sample(range(31), 10) |
- def gen_between(start, end, count): return random.sample(range(start, end+1), count)将有助于将其称为更可定制的。
- 随机抽样(30+1),10),实际上。
- @这似乎不值得。一方面,它迫使我们关注start和count,我们可能不会花很多时间。
- 呵呵。我只加载了一个(错误的)答案,在2-3分钟内生成了自己的问题,当我发布和重新加载时,您已经给出了它。奇怪的.无论如何,在删除之前从我的答案中添加一个注释:在py2上,使用xrange,而不是range,以避免创建临时list(py3的range)已经是一个"懒惰的序列")。另外,链接到random.sample文档以供参考。正如Astraujums指出的,如果范围从0到30应该是包含的,那么使用range(31)允许30作为合法价值。
- @阿斯特鲁姆说得对。
- 在0到31之间效果很好,但是如果范围是0到100000000呢?这将为RAM填充千兆字节的数字,只需选择其中一个。而且已经有了能够正确完成工作的random.randint。
- @zvone只在您使用python 2的情况下使用,在这种情况下,您应该使用xrange作为shadowranger,文档中说
- @zvone在python 3中,range对象是特殊的序列,可以很好地处理这种情况。在python 2中使用xrange。random.randint具有不同的功能。我建议您仔细阅读这里其他答案的问题和SOEM,看看这个解决方案可能有什么问题。
- @帕特里克豪说得对,我不知道埃多克斯1〔3〕会用这个。
- @zvone:很多人假设xrange返回一个生成器对象,而实际上它返回的对象大部分是执行序列协议的(因此是不可更改的),对于random.sample来说,重要的是你可以在它上面调用len并用整数索引来索引它。Py3的range只是Py2的xrange的改进版本,它支持完整序列协议(允许切片、O(1)成员身份测试等)。
1 2 3 4 5
| >>> n=[]
>>> while len(n)<=10:
x=randint(0,30)
if x not in n:
n.append(x) |
不要忘记到清晰的名单,你的每一次运行这个代码 P / < >
- 这可能只生成一个数字的列表。
- 嗯,我忘了
- 谢谢你@patrickhaugh
- 或者您可以将此函数设置为返回列表的函数,这样就不需要清理列表了…
- 是的,你是对的??