Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在每次循环迭代中从数组中排除数字的最快方法_Python_List_Dictionary_Set_Subset - Fatal编程技术网

Python 在每次循环迭代中从数组中排除数字的最快方法

Python 在每次循环迭代中从数组中排除数字的最快方法,python,list,dictionary,set,subset,Python,List,Dictionary,Set,Subset,我不是python专家 我试图实现一个K-着色区间问题的解决方案。 只使用python标准库,因此没有numpy。 我想要达到的目标: 因此,我有一个排序的元素列表,在每个循环迭代中,我需要排除多个元素,以便在下一次迭代中,循环继续处理上一次迭代产生的排序的子集。 在每次迭代中,我都使用二进制搜索算法访问索引,并且在处理列表时必须始终对其进行排序 我尝试过使用array.pop(index),但是我的解决方案对于100000个元素的列表来说速度很慢,效率也不高,因为根据n是列表中元素的数量,它的

我不是python专家

我试图实现一个K-着色区间问题的解决方案。 只使用python标准库,因此没有numpy。

我想要达到的目标: 因此,我有一个排序的元素列表,在每个循环迭代中,我需要排除多个元素,以便在下一次迭代中,循环继续处理上一次迭代产生的排序的子集。 在每次迭代中,我都使用二进制搜索算法访问索引,并且在处理列表时必须始终对其进行排序

我尝试过使用array.pop(index),但是我的解决方案对于100000个元素的列表来说速度很慢,效率也不高,因为根据n是列表中元素的数量,它的复杂性是O(n)

我曾尝试将输入存储在set()中并对其进行处理,但由于每次迭代都必须执行二进制搜索算法,因此无法存储它们,因为为了进行二进制搜索,我需要通过索引访问元素,这在set
TypeError中是不可能的:“set”对象是不可下标的

例:

输入是根据每个子数组的第二项按升序排序的列表

arr = [[0, -1, 0], [1, 4, 0], [3, 5, 0], [0, 6, 0], [4, 7, 0], [3, 7, 0], [5, 9, 0], [6, 10, 0]]

for i in range(len(arr)) :

   x = binarysearch(arr, value) #returns an index

   while x > 0 :
      helper = x
      array.exclude(x)
      x = binarysearch(arr, arr[helper][0]) #returns an index
我不希望上次迭代中排除的所有arr[x]都包含在当前迭代中

任何想法都将不胜感激


提前感谢

如果需要对单个元件进行操作,请提供
O(n)
最快的声音。但是你的描述听起来更像是一个
O(n^2)
问题(“…在每次循环迭代中,我需要排除多个元素,以便在下一次迭代中…”):在循环上循环。AFAIK在标准python中没有一个容器可以在
O(n)
内实现随机访问和删除。您可以通过二进制搜索树
O(log(n))
实现这一点,因为您可以实现它们。因此,我担心您将不得不推出自己的或使用第三方之一。你会找到一些参考资料