Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.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_Arrays_Jupyter Notebook - Fatal编程技术网

在python中获取超出范围的索引

在python中获取超出范围的索引,python,arrays,jupyter-notebook,Python,Arrays,Jupyter Notebook,我刚开始学习Python,我理解了这个问题。检查整数数组并消除所有值的重复。不同的整数都移动到数组的左侧 我试图在数组中找到所有重复的条目,删除它们,然后向左移动其余的条目 这是我写的代码,我就是不知道出了什么问题,如何从索引中出来,我试着用C++写,而且效果很好。谁能帮我解释一下它是如何脱离索引的 array = [2,2,3,5,2,5,6,2,4,8,3,36,8,2] for i in range(len(array)-1,-1,-1): for j in range(0,i)

我刚开始学习Python,我理解了这个问题。检查整数数组并消除所有值的重复。不同的整数都移动到数组的左侧

我试图在数组中找到所有重复的条目,删除它们,然后向左移动其余的条目

<>这是我写的代码,我就是不知道出了什么问题,如何从索引中出来,我试着用C++写,而且效果很好。谁能帮我解释一下它是如何脱离索引的

array = [2,2,3,5,2,5,6,2,4,8,3,36,8,2]

for i in range(len(array)-1,-1,-1):
    for j in range(0,i):
        if(array[j]==array[i]):
            del array[i]
            
print(array)
预期产量为

[2, 3, 5, 6, 4, 8, 36]

在第一次迭代中,i指向最后一个元素,j指向第一个元素。因为它们是相同的,所以删除数组中的一个元素。现在数组中的元素比以前少了一个,并且i所指的元素不再存在。因此,您将得到索引错误。

在第一次迭代中,i指向最后一个元素,j指向第一个元素。因为它们是相同的,所以删除数组中的一个元素。现在数组中的元素比以前少了一个,并且i所指的元素不再存在。因此,您将得到索引错误。

一旦您在找到具有相同值的另一个元素后删除当前索引中的元素,您需要中断循环,因为我不再引用相同的元素


一旦在找到另一个具有相同值的元素后删除当前索引中的元素,就需要中断循环,因为我不再引用相同的元素


发生这种情况是因为您在数组或列表上迭代到最后一个索引,并同时更改其长度。在循环开始时创建的范围对列表大小的更改一无所知。如果您选择手动控制当前索引,您将有办法避免它。但这有点像蟒蛇,因为它看起来设计过度了

您可以通过其他方式执行相同的任务来避免此问题,并使用Python的强大功能。例如,可以使用筛选所有重复项:

数组=[2,2,3,5,2,5,6,2,4,8,3,36,8,2] 结果=设置数组 打印结果 但是,正如我在下面的评论中指出的,这很可能会改变list.b中元素的顺序。如果您需要删除重复项,但保持顺序不变,那么这肯定不是最好的方法

或者,您可以使用另一个列表来存储结果:

数组=[2,2,3,5,2,5,6,2,4,8,3,36,8,2] 结果=[] 对于数组中的数字: 如果结果中没有数字: 结果.附件编号 打印结果
发生这种情况是因为您在数组或列表上迭代到最后一个索引,并同时更改其长度。在循环开始时创建的范围对列表大小的更改一无所知。如果您选择手动控制当前索引,您将有办法避免它。但这有点像蟒蛇,因为它看起来设计过度了

您可以通过其他方式执行相同的任务来避免此问题,并使用Python的强大功能。例如,可以使用筛选所有重复项:

数组=[2,2,3,5,2,5,6,2,4,8,3,36,8,2] 结果=设置数组 打印结果 但是,正如我在下面的评论中指出的,这很可能会改变list.b中元素的顺序。如果您需要删除重复项,但保持顺序不变,那么这肯定不是最好的方法

或者,您可以使用另一个列表来存储结果:

数组=[2,2,3,5,2,5,6,2,4,8,3,36,8,2] 结果=[] 对于数组中的数字: 如果结果中没有数字: 结果.附件编号 打印结果
预期产量是多少?[2,3,5,6,4,8,36]?是的,这是预期产出。预期产出是多少?[2,3,5,6,4,8,36]?是的,这是预期的输出。谢谢,这非常有效。我不知道我是怎么漏掉的:-@SarthakDhonchak没问题。这种情况可能是因为您连续有三个或更多的副本。我认为最好检查一下列表的大小。@AndrejZacharevicz即使连续有三个或更多的副本,它也可以正常工作:谢谢,这非常有效。我不知道我是怎么漏掉的:-@SarthakDhonchak没问题。这种情况可能是因为您连续有三个或更多的副本。我认为最好检查列表的大小。@AndrejZacharevicz即使一行中有三个或更多重复项,它也可以正常工作:你是说如果数字不在结果中?另外,如果需要保持顺序,第二个示例也很好,只是速度较慢。我也会添加一个SEED集合,并检查数字是否不在SEED中。@BrianMcCutchon谢谢!修正了。@BrianMcCutchon是的,我忘记了集合中的订单问题。谢谢你指出这一点。你提出了一个很好的方法来使用集合和保存列表的顺序!你的意思是如果结果中没有数字?同样,第二个例子是好的,如果保持顺序是必要的,除了它比较慢。我也会添加一个SEED集合,并检查数字是否不在SEED中。@BrianMcCutchon谢谢!修正了。@BrianMcCutchon是的,我忘记了集合中的订单问题。谢谢你指出这一点。你向我们提出了一个很好的方法 设置并保存列表的顺序!
array = [2,2,3,5,2,5,6,2,4,8,3,36,8,2]
 
for i in range(len(array)-1,-1,-1):
    for j in range(0,i):
        if(array[j]==array[i]):
            del array[i]
            break
print(array)