在python中,重新生成一个随机索引,直到索引元素满足条件n次
我知道关于循环和随机数也有一些类似的问题,但我似乎找不到解决问题的方法 假设我的数据集中有一个固定的数字列表,以及该数字必须满足的阈值:在python中,重新生成一个随机索引,直到索引元素满足条件n次,python,python-3.x,list,Python,Python 3.x,List,我知道关于循环和随机数也有一些类似的问题,但我似乎找不到解决问题的方法 假设我的数据集中有一个固定的数字列表,以及该数字必须满足的阈值: 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
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)
或者,如果要避免多次选择同一项目:
random.choices(filtered, k=3)
random.sample(filtered, k=3)
上述每个函数都将输出一个列表。如果需要将输出转换为元组,请在输出上使用
元组(..)
。首先需要澄清。您是否需要在每次迭代中从列表中选择一个随机元素,或者每次都需要从列表中选择一个不同的随机元素。也就是说,同一个索引可以选取两次吗?你在做后者
其次,要使用范围(len(x))
。您不希望将x
的长度硬连接到代码中,您希望索引0成为可能random.shuffle()
可能是更好的选择
最后,您要执行以下操作:
result = []
for ....
if select >= threshold:
result.append(select)
if len(result) >= 3: break
如果我们假设以下约束条件:
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 ]
x=[7,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39,41]
阈值=25
结果_索引=[]
而len(结果指数)<3:
索引=随机范围(0,len(x))
如果x[index]>=阈值和索引不在结果索引中:
结果_index.append(索引)
结果=[x[a]表示结果中的索引]
以下是其工作原理:
- 在循环中,我们存储的是索引,而不是数字本身
- 对于每个索引,我们检查两个条件:其中有一个数字大于或等于阈值,我们以前从未见过该索引
- 如果条件满足,我们保存的是索引,而不是数字李>
- 重复,直到我们有3个索引
- 通过直接从这些索引中获取数字来构建新列表