Удаление/исключение элементов списка по индексам, полученным из значений другого списка
Как исправить? Получается пройти цикл должен один раз, и сразу перезаписываться по нужному условию, у меня проходит много раз.
Дано два списка:
zone=[2, 2, 3, 6, 6, 7, 7, 8, 8, 9, 9]
dupdup=[1, 4, 6, 8, 10]
Список dupdup, содержит номера индексов, которые нужно -удалить/исключить/не записывать- из списка zone.
newzone=[]
for i,x in enumerate(zone):
for k in (dupdup):
if k!=i:
newzone.append(x)
print("newzone",newzone)
На выходе получается:
newzone [2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9].
А должно получиться так:
newzone [2, 3, 6, 7, 8, 9].
Ответы (1 шт):
Лучше преобразовать list - dupdup в set и проверять находится ли index в множестве, так как:
- Проверка
in listзанимаетО(n)времени, т.е при каждой проверкеinбудет проверяться каждый элемент находящийся в списке пока не найдется искомый. - Проверка
in setзанимаетO(1)времени, т.е элемент находится за константное время, так элемент находится по hash значению.
И список newzone можно формировать с помощью list comprehension что также ускорит работу программы
zone = [2, 2, 3, 6, 6, 7, 7, 8, 8, 9, 9]
dupdup = {1, 4, 6, 8, 10}
newzone = [num for i, num in enumerate(zone) if i not in dupdup]
print(newzone)
Вывод:
[2, 3, 6, 7, 8, 9]
Временная сложность - различных операций в python