w = [1, 2, 3, -3, -2, 4, -4, 1, 2, -2]
def data_remover(xarray, ind):
    for i in ind:
        del xarray[i]
    return xarray
print(data_remover(w, [2, 3, 5, 6, 8, 9]))
I am trying to write a code such that it removes adjacent (+n, -n) pairs such as (3,-3) (4,-4) etc.
However I cannot use del[i] since when I remove an element the xarray also changes. I tried to use deepcopy to copy the x array but I couldnt manage to run the code.
from copy import deepcopy
w = [1, 2, 3, -3, -2, 4, -4, 1, 2, -2]
def data_remover(xarray, ind):
    xcopy = deepcopy(xarray)
    for i in ind:
        del xarray[i]
    return xarray
print(data_remover(w, [2, 3]))
Advertisement
Answer
You can sort the list of indices in descending order so that deleting an element will not effect the position of another. You can do this by reversed(ind)
w = [1, 2, 3, -3, -2, 4, -4, 1, 2, -2] 
def data_remover(xarray, ind):
    for i in reversed(ind):
         del xarray[i] 
    return xarray 
print(data_remover(w, [2, 3, 5, 6, 8, 9]))
Or if your indices are not in any order you can always sort them in descending order.
for i in sorted(ind, reverse = True):