Возможно, это не самый лучший способ, но я бы отслеживал словарь, где ключи - это исходные позиции индекса, а значения - текущие позиции индекса. Я называю это index_mapping
Я создал функцию для применения удалений к index_mapping и показываю, что вы можете создать список удалений и применить их все в конце, но вы также можете применить их один за другим
Каждое событие удаления находится в местоположении x или y и является индексом для текущего массива
def process_deletions(index_mapping, deletions):
for deletion in deletions:
del_kind = deletion['kind']
del_ind = deletion['index']
for orig_ind,curr_ind in index_mapping[del_kind].items():
#Don't update an index if it's less than the one deleted
if curr_ind < del_ind:
continue
#Set the deleted index to now be -1
elif curr_ind == del_ind:
index_mapping[del_kind][orig_ind] = -1
#Otherwise if the index is greater than the one deleted
#decrement the new index it points to
#i.e. if index 3 is deleted, what was index 5 is now index 4
else:
index_mapping[del_kind][orig_ind] -= 1
return index_mapping
num_rows = 10
num_cols = 10
#Start out that each original index points to it's same position in the unmodified matrix
index_mapping = {
'x':{i:i for i in range(num_rows)},
'y':{i:i for i in range(num_cols)},
}
#Keep track of all the deletions made
#Can alternatively make one deletion at a time and keep applying it to the index_mapping
deletions = [
{'kind':'x', 'index':1},
{'kind':'y', 'index':1},
{'kind':'x', 'index':6},
{'kind':'y', 'index':6},
{'kind':'x', 'index':4},
{'kind':'y', 'index':4},
]
index_mapping = process_deletions(index_mapping, deletions)
print(index_mapping)