重新生成一个随机索引,直到被索引的元素在python中满足n次条件



我知道关于循环数和随机数也有一些类似的问题,但我似乎找不到解决问题的方法。

假设我有一个来自数据集的固定数字列表,以及该数字必须满足的阈值:

x = (7,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39,41)
threshold= 25

我需要从这个列表中随机选择一个数字。不幸的是,我不能直接循环浏览我的原始列表,我必须首先随机选择列表的索引,然后找到我的号码。例如,如果我现在随机生成一个索引号1,那么我得到x[1],它是11

我需要的最终结果是找到至少3次大于阈值的数字,然后将所有结果放入列表中,然后我的循环就可以停止了。(索引不能重复(。例如,可能的最终结果是(27,29,31)(结果可以是任何格式(。我想也许可以开始这样的事情,但真的需要帮助才能继续:

除非您特别关心创建额外过滤列表的内存使用情况,否则最简单的方法可能是从以下操作开始:

filtered = [i for i in x if i > threshold]

然后,您可以从此筛选列表中选择三个样本(在import random之后(。以下人员可能会多次选择同一项目:

random.choices(filtered, k=3)

或者如果你想避免多次选择同一项:

random.sample(filtered, k=3)

上述每个函数都将输出一个列表。如果需要将输出转换为元组,请在输出上使用tuple(....)

首先进行澄清。您需要在每次迭代时从列表中选择一个随机元素,还是每次都需要从列表中挑选一个不同的随机元素。也就是说,同一个索引可以被选取两次吗?你在做后者。

其次,您希望使用range(len(x))。您不希望将x的长度硬连接到代码中,并且希望索引0成为可能。CCD_ 9可能是更好的选择。

最后,你想做一些类似的事情:

result = []
for ....
if select >= threshold:
result.append(select)
if len(result) >= 3: break

如果我们假设以下约束:

  1. 我们不允许循环浏览原始列表(包括列表理解(
  2. 我们一次只能通过原始列表的索引访问一个成员
  3. 我们必须从列表中选择3个大于或等于阈值的不同成员

以下代码应满足所有要求:

x = [ 7,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39,41 ]
threshold = 25
result_index = []
while len(result_index) < 3:
index = random.range(0, len(x))
if x[index] >= threshold and index not in result_index:
result_index.append(index)
result = [ x[a] for a in result_index ]

以下是它的工作原理:

  • 在循环中,我们存储索引,而不是数字本身
  • 对于每个指数,我们检查2个条件:有一个数字大于或等于阈值我们以前从未见过这个指数
  • 如果条件满足,我们保存索引,而不是数字
  • 重复,直到我们有3个索引
  • 通过直接从这些索引中获取数字来构建新的列表

相关内容

  • 没有找到相关文章

最新更新