我想使用Python创建一个具有特定长度的随机值列表,每个值在一个范围内至少一次。下面是我的Python代码:
import random
Start = 1
Stop = 5
limit = 6
RandomListOfIntegers = [random.randint(Start, Stop) for iter in range(limit)]
print(RandomListOfIntegers)
我在一次运行中得到了一个输出列表,如下所示:
[1, 4, 2, 4, 1, 5]
在上述启动和停止范围(1-5(内的输出中,缺少3。但我希望列表中的每个值在该范围内至少有一次。我的预期输出如下:
[1, 3, 2, 4, 1, 5]
引导我获得以上输出。提前谢谢。
您可以生成所有数字,对生成的数字进行混洗,然后添加随机数以达到limit
:
import random
Start = 1
Stop = 5
limit = 6
RandomListOfIntegers = list(range(Start, Stop+1))
random.shuffle(RandomListOfIntegers)
RandomListOfIntegers.extend(random.choices(RandomListOfIntegers, k=limit-Stop))
print(RandomListOfIntegers)
分两步完成
- 采样范围及其长度,您将以随机顺序获得区间的所有数字
- 使用随机数进行扩展,直到到达
limit
randomListOfIntegers = random.sample(range(start, stop + 1), stop) +
[random.randint(start, stop) for iter in range(limit - stop)]
您也可以生成所有值并对其进行混洗,然后添加元素以到达limit
allValues = list(range(start, stop + 1))
random.shuffle(allValues)
randomListOfIntegers = allValues + [random.randint(start, stop) for iter in range(limit - stop)]
我认为创建一个包含所有数字的列表,添加额外的数字,然后洗牌会更容易,就像这样:
import random
Start=1
Stop=5
Limit=6
mylist = list(range(Start,Stop+1))
for i in range(Limit-(Stop-Start)-1):
mylist.append(random.randint(Start,Stop))
random.shuffle(mylist)
print(mylist)
它输出:
[3, 2, 4, 1, 5, 3]
我希望它能有所帮助!