【问题标题】:How to create a random value list with specific length with each value at least once within the range in Python?python - 如何在Python的范围内创建一个具有特定长度的随机值列表,每个值至少一次?
【发布时间】:2020-04-23 08:24:03
【问题描述】:

我想使用 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 大于从 start 到 stop 的范围如何使用 [start, start+1, ..., stop] 创建一个列表,添加所需的更多内容,然后重新排列列表?

标签: python python-3.x


【解决方案1】:

您可以生成所有数字,随机播放您生成的数字,然后添加随机数以到达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)

【讨论】:

  • 非常感谢您的指导。根据您建议的代码,我得到了预期的输出。谢谢。
【解决方案2】:

分两步完成

  • 对范围进行采样,通过其长度,您将得到随机顺序的区间的所有数字
  • 用随机数扩展,直到到达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)]

【讨论】:

  • 非常感谢您的指导。根据您建议的代码,我得到了预期的输出。谢谢。
【解决方案3】:

我认为创建一个包含所有数字的列表会更容易,添加额外的然后随机播放,如下所示:

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]

希望对你有帮助!

【讨论】:

  • 这个mylist = [Start:Stop] 不存在;
  • @Gamopo:非常感谢您的指导。根据您建议的代码,我得到了预期的输出。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-02
  • 2020-10-05
  • 2016-01-23
  • 2017-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多