NeToster
@NeToster

Почему функция remove из массива не работает?

Если будет ответ на следующий вопрос, дальше можно не читать:
Почему удаляется именно значение, а не индекс у функции remove?
array.remove(индекс)
___________________________________________________________________________________
array = [1, 0, 2, 0, 3, 4, 5, 0, 6, 7, 8, 9]
print("До удаления", array)
c = 0
Array_counter = []
for i in range(len(array)):
    if array[i] == 0:
        Array_counter.append(i)
        c = c+1
print("Array_counter = ", Array_counter)
for k in range(0, c):
    m = Array_counter[k]
    print("Индекс элемента с нулевым значением = ", m)
    array.remove(m)  # удаляем 0 с индексом m
print("Удалили все нули", array)


Вывод:
До удаления [1, 0, 2, 0, 3, 4, 5, 0, 6, 7, 8, 9]
Array_counter = [1, 3, 7]
Индекс элемента с нулевым значением = 1
Индекс элемента с нулевым значением = 3
Индекс элемента с нулевым значением = 7
Удалили все нули [0, 2, 0, 4, 5, 0, 6, 8, 9]
  • Вопрос задан
  • 842 просмотра
Пригласить эксперта
Ответы на вопрос 3
@Stqs
senior software developer
>>> a = [1, 2, 3, 4, 5]
>>> a.remove(3)
>>> a
[1, 2, 4, 5]
>>> del a[3]
>>> a
[1, 2, 4]
Ответ написан
Комментировать
LaRN
@LaRN
Senior Developer
Каждый раз после удаления, индексы оставшихся нулей(и всех остальных элементов с индексами большими чем индекс удаляемого элемента) меняются, сдвигаются к началу массива.
Ответ написан
Комментировать
Соглашусь с LaRN...
...ну, и конечно же, используйте del вместо remove, поскульку
"list.remove(x) удаляет первый элемент в списке, имеющий значение x" ;) - так что remove как раз работает исправно :)

В таком случае минимальным изменением кода будет:
...
for k in range(0,c)[::-1]:
    m = Array_counter[k]
    print("Индекс элемента с нулевым значением = ", m)
    del(array[m])  # удаляем 0 с индексом m
...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы