Python
Как удалить элемент из списка Python: remove, pop, del и фильтрация
В Python нет одного универсального способа удалить элемент из списка, потому что «удалить» может означать разные вещи
Если вы знаете значение, используйте remove()
Если знаете позицию, используйте pop() или del
Если нужно удалить все элементы по условию, проще собрать новый список через генератор списка
Быстрая шпаргалка
numbers = [10, 20, 30, 40]
numbers.remove(30) # удалить первое значение 30
last = numbers.pop() # удалить последний элемент и вернуть его
del numbers[0] # удалить элемент с индексом 0
numbers.clear() # очистить весь список
Главное отличие: remove() ищет значение, а pop() и del работают с индексом
Удалить по значению через remove()
Метод remove() удаляет первый элемент, значение которого совпадает с тем, что вы передали
fruits = ["яблоко", "банан", "груша", "банан"]
fruits.remove("банан")
print(fruits)
Вывод:
['яблоко', 'груша', 'банан']
Удалился только первый банан. Второй остался в списке
Если значения нет, Python выдаст ValueError
fruits = ["яблоко", "груша"]
if "банан" in fruits:
fruits.remove("банан")
else:
print("Такого фрукта нет")
Удалить по индексу через pop()
Метод pop() удаляет элемент по позиции и возвращает его. Это удобно, когда удаленный элемент еще нужен
tasks = ["написать код", "проверить", "отправить"]
removed_task = tasks.pop(1)
print("Удалили:", removed_task)
print("Осталось:", tasks)
Вывод:
Удалили: проверить
Осталось: ['написать код', 'отправить']
Индексы в Python начинаются с нуля. Поэтому pop(1) удалил второй элемент
Если вызвать pop() без аргумента, удалится последний элемент
names = ["Анна", "Илья", "Динар"]
last_name = names.pop()
print(last_name)
print(names)
Удалить через del
del удаляет элемент по индексу, но ничего не возвращает
prices = [100, 200, 300]
del prices[0]
print(prices)
Вывод:
[200, 300]
del удобно использовать, когда нужно удалить срез
numbers = [1, 2, 3, 4, 5, 6]
del numbers[1:4]
print(numbers)
Вывод:
[1, 5, 6]
Удалить все элементы с нужным значением
remove() удаляет только первое совпадение. Если нужно убрать все одинаковые значения, используйте генератор списка
numbers = [1, 2, 3, 2, 4, 2, 5]
numbers = [number for number in numbers if number != 2]
print(numbers)
Вывод:
[1, 3, 4, 5]
Так мы создаем новый список только из тех элементов, которые нам подходят
Почему нельзя удалять элементы прямо во время for
Новички часто пишут так:
numbers = [1, 2, 2, 3, 2]
for number in numbers:
if number == 2:
numbers.remove(number)
print(numbers)
Результат может удивить:
[1, 3, 2]
Проблема в том, что список меняется во время обхода. Индексы сдвигаются, и цикл может пропустить часть элементов
Лучше писать так:
numbers = [1, 2, 2, 3, 2]
numbers = [number for number in numbers if number != 2]
print(numbers)
Как повторить на своем компьютере
Создайте файл remove_from_list.py
Вставьте код:
products = ["книга", "ручка", "тетрадь", "ручка"]
products.remove("ручка")
print(products)
products = [product for product in products if product != "ручка"]
print(products)
Откройте терминал в папке с файлом
На Windows выполните:
py remove_from_list.py
На macOS и Linux выполните:
python3 remove_from_list.py
Ожидаемый вывод:
['книга', 'тетрадь', 'ручка']
['книга', 'тетрадь']
Что выбрать в реальной задаче
| Задача | Что использовать |
|---|---|
| Удалить первое значение | remove(value) |
| Удалить по индексу и получить удаленный элемент | pop(index) |
| Удалить по индексу без возврата | del list[index] |
| Удалить несколько элементов по срезу | del list[start:end] |
| Очистить список полностью | clear() |
| Удалить все элементы по условию | генератор списка |
Что почитать дальше по Python
Если нужен общий маршрут по теме, откройте рубрику Python. Для соседних задач пригодятся эти разборы:
- Как удалить элемент из списка в Питоне: remove, pop, del и фильтр
- Как удалить повторяющиеся элементы из списка Python: set, dict.fromkeys и порядок
- append в Python: как добавить элемент в список и не поймать None
- Как добавить в список элемент: append, extend и insert в Python