Не пойму почему так работает remove элементов листа

MacSeem

Пользователь
Пользователь
Май 15, 2020
37
6
8
На выходе получается [2, 4, 6]
Как будто он удаляет элементы через один. Но почему? Цикл же должен пройти по всем элементам массива с и удалить из него все элементы.

Python:
a = [1, 2, 3, 4, 5, 6]
c = a
for i in a:
    c.remove(i)
print (c)
 

floordiv

Пух
Команда форума
Модератор
Авг 14, 2020
21
7
3
если вам нужно очистить весь список используйте метод c.clear()
или просто присвоить пустой список :)
 

floordiv

Пух
Команда форума
Модератор
Авг 14, 2020
21
7
3
потому что ты удаляешь элементы, пока итерируешься по списку. Соответственно, его длина меняется динамически во время итерации - а значит, элемент раз через раз пропускается
 
  • Мне нравится
Реакции: MacSeem

MacSeem

Пользователь
Пользователь
Май 15, 2020
37
6
8
потому что ты удаляешь элементы, пока итерируешься по списку. Соответственно, его длина меняется динамически во время итерации - а значит, элемент раз через раз пропускается
Да, я сначала делал это с одним списком "а" и понял, что в этом есть что-то неправильное, менять список по которому итерируешься, и поэтому сделал дополнитеьный список "с" чтобы не модифицировать "а". Но всё равно почему-то работает так же.

А вот так всё уже работает нормально:
Python:
a = [1, 2, 3, 4, 5, 6]
c = [1, 2, 3, 4, 5, 6]
for i in a:
    c.remove(i)
print (c)
 

HakeR

Новичок
Пользователь
Авг 15, 2020
3
1
3
если вам нужно очистить весь список используйте метод c.clear()
 
  • Мне нравится
Реакции: floordiv

Форум IT Специалистов