Предполагая, что вы можете скопировать список (ограничения памяти могут вызвать проблемы здесь) и вам нужно только удалить из него определенные элементы, вы можете создать поверхностную копию списка и удалить элементы из него, повторяя при этом исходный список:
a_list = [1, 2, 3, 4, 5]
b_list = a_list.copy()
removal_key = 0
for element in a_list:
if element % 2 == 0:
b_list.pop(removal_key)
removal_key -= 1; # we need to push the removal key back afer every deletion as our array b_list becomes smaller than the original after every deletion
removal_key += 1
print(b_list) #[1, 3, 5]
Если создание 2-го списка не вариант, вы можете сохранить ключи элементов, которые должны быть удалены из списка, а затем использовать второй список для их удаления:
a_list = [1, 2, 3, 4, 5]
elements_to_remove = []
for key, element in enumerate(a_list):
if element % 2 == 0:
elements_to_remove.append(key)
removed_emelent_count = 0
for element in elements_to_remove:
a_list.pop(element - removed_emelent_count)
removed_emelent_count += 1
print(a_list) #[1, 3, 5]
Обратите внимание, что первое решение более эффективно по времени (особенно при удалении большого количества элементов), тогда как второе решение более эффективно по памяти, особенно при удалении небольшого количества элементов из списка.