如何在Python中创建一个具有特定长度的随机值列表,每个值在该范围内至少一次



我想使用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]

我希望它能有所帮助!

最新更新