对一维数组元素的迭代在几次迭代后给出索引错误

Iteration over elements of 1D array is giving index error after few iterations

我有一个包含 15 个元素的数组 'A'。我必须删除一些元素并使数组具有 8 个元素。 我必须比较相邻的元素和它们之间的差异的最小值,它应该删除第二个元素等等。迭代应继续,直到元素数变为 8。 我收到错误:IndexError:索引 13 超出轴 0 的范围,大小为 13。 这是我的代码:

A = [1, 11, 21, 105, 115, 134, 139, 149, 152, 180, 190, 195, 200, 210, 236]
k = 0
while len(A) > 8:
    for i in range(len(A) - 1):
        x = A[i-1]
        y = A[i]
        if abs(x-y) == k:
            A = np.delete(A, np.argwhere(A == y))
    if len(A) == 8:
        print("Final A= ", A)
    k = k+1

您的错误似乎在以下行:

A = np.delete(A, np.argwhere(A == y))

代码将在满足此条件后继续循环,可能会导致在 for 循环的一次迭代中多次删除。要解决这个问题,只需在此行之后添加一个 break,以打破循环并重新评估数组的大小:

if abs(x-y) == k:
      A = np.delete(A, np.argwhere(A == y))
      break

您可以使用单个循环迭代 len(A)-8 次,以便每次迭代删除一个元素。从移位版本中减去数组以计算连续元素之间的差异,并删除具有最小差异的正确元素。最后在循环外打印。

import numpy as np 

A = np.array([1, 11, 21, 105, 115, 134, 139, 149, 152, 180, 190, 195, 200, 210, 236])

for k in range(len(A)-8):
    diff = np.abs(A[1:] - A[:-1]) 
    A = np.delete(A, np.argmin(diff)+1)

print("Final A = ", A)

给出:

Final A = [ 1 21 105 134 149 180 200 236]