Почему не работает метод .remove() python
Почему-то метод remove оставляет объекты. Вот код.
phrase = "Don't panic!"
plist = list(phrase)
for i in plist:
if i not in list('on tap'):
plist.remove(i)
print(plist)
Вот что выдает: ['o', 'n', 't', ' ', 'p', 'a', 'n', 'c']. Как видите, элемент 'c' не удалён из списка. Не понимаю почему. Буду рад, если объясните
Ответы (2 шт):
Автор решения: Gladius
→ Ссылка
Логичней будет так:
phrase = "Don't panic!"
exception = "on tap"
plist = [i for i in phrase if i in exception]
print(plist)
Как правильно указали в комментариях, вы удаляете элементы из списка, по которому итерируетесь, из за этого код и работает некорректно.
Автор решения: Cozar Ragi
→ Ссылка
В данном случае вы идете по списку, удаляете элемент, а итератор i после удаления перепрыгивает. Так совпало что, это один из последних элементов. Измените Don't на Dyn't и у вас 'y' так же не удалиться. Можно так изменить ваш код.
phrase = "Don't panic!"
plist = list(phrase)
run_list = list(phrase) // для итератора.
for i in run_list:
if i not in list('on tap'):
plist.remove(i)
print(plist)
Но с генератором списка изящней.