当前位置: 首页 > 知识库问答 >
问题:

在Python中随机查找列表中可用位置的一种有效算法

郎思远
2023-03-14

我需要将列表中的一个位置随机分配给一个输入。我需要先检查一下是否没有被占用,然后再使用。我能想出的最佳算法如下:

def get_random_addr(input_arr):

    while True:
        addr = random.randrange(1, len(input_arr))
        if input_arr[addr] is None:
            break
    return addr

这显然不是有效的,因为当我们占用更多的插槽时,循环需要更长的时间来找到空插槽,甚至可能需要永远的时间(假设只剩下一个空插槽)。你有什么更好的解决办法吗?

我是怎么做的

# Create a list of indexes at the beginning when all the values are None 
available_index = list(range(1, len(input_arr)))
random.shuffle(available_index)

# To get a random index simply pop from shuffled available index
random_index = available_index.pop()

共有1个答案

爱琪
2023-03-14

如果不能使用numpy,id保留一组已知包含none的索引。每次添加或删除none时,将更新此索引集

 类似资料:
  • 问题内容: 关于你的第一个问题:该代码非常好,并且如果与其中的一个元素相等就可以正常工作。也许你尝试查找与其中一项不完全匹配的字符串,或者你使用的浮点值会导致不准确。 关于第二个问题:如果“查找”列表中的内容,实际上有几种可能的方法。 检查里面是否有东西 这是你描述的用例:检查列表中是否包含某些内容。如你所知,你可以使用in运算符: 过滤集合 即,找到满足特定条件的序列中的所有元素。你可以为此使用

  • 问题内容: 我正在为学校项目这样做(因此我不能使用任何高级功能),并且我正在使用Python 2.6.6。 我有一个从1到1000的数字列表,我的种子将是448。 如何使用该种子生成随机序列,以便列表中的数字位于不同的索引中? 知道种子后,是否有可能将列表中的元素返回到初始位置? 抱歉,如果我的问题令人困惑,但是英语不是我的母语。 谢谢。 问题答案: 结果是 您的列表现已伪随机化。 “伪”很重要,

  • 问题内容: -我只是解析了一个大文件,然后创建了一个包含42.000个字符串/单词的列表。我想查询[针对此列表]以检查给定的单词/字符串是否属于它。所以我的问题是: 进行查找的最有效方法是什么? 第一种方法是对列表()进行排序,然后使用 这确实是微不足道的,我相信有更好的方法可以做到。我的目标是应用快速查找来查找给定字符串是否在此列表中。如果您对其他数据结构有任何想法,欢迎使用。但是,我现在想避免

  • 如何在Python中找到列表的中值?列表可以是任何大小,并且不能保证数字按任何特定顺序排列。 如果列表包含偶数个元素,则函数应返回中间两个元素的平均值。 以下是一些示例(出于显示目的进行了分类):

  • 问题内容: 有没有一种方法可以在Java中随机获取HashMap的值? 问题答案: 这有效: 如果您希望随机值不是类型,只需在最后一行添加强制类型转换即可。因此,如果声明为: 最后一行可以是: 下面的代码 无效 ,总是返回s 数组,不能将其强制转换为。

  • 问题内容: 我想创建一个随机的整数列表以进行测试。数字的分布并不重要。唯一要数的是 时间 。我知道生成随机数是一项耗时的任务,但是必须有更好的方法。 这是我当前的解决方案: v2比v1快,但无法大规模使用。它给出以下错误: ValueError:样本大于总体 是否有一个快速,有效的解决方案能够在这种规模上工作? 答案的一些结果 安德鲁的:0.000290962934494 咬人:0.0058455