JavaRush /Курсы /Модуль 1: Python Core /Удаление элементов

Удаление элементов

Модуль 1: Python Core
6 уровень , 5 лекция
Открыта

6.1 Функции remove() и discard()

Множества в Python предоставляют несколько способов удаления элементов. Ниже мы рассмотрим методы remove(), discard(), pop(), clear(), а также использование оператора del для удаления множества целиком. Каждый метод имеет свои особенности и применения.

Два самых распространенных способа удаления элементов — это методы remove() и discard().

Метод remove()

Метод remove() удаляет указанный элемент из множества. Если элемент не существует в множестве, возникает ошибка KeyError.


my_set = {1, 2, 3, 4, 5}
my_set.remove(3)
print(my_set)  # Вывод: {1, 2, 4, 5}
            
# Если элемента нет в множестве, возникает ошибка
my_set.remove(6)  # KeyError: 6
        

Метод discard()

Метод discard() также удаляет указанный элемент из множества, но, в отличие от remove(), он не вызывает ошибку, если элемента нет в множестве.


my_set = {1, 2, 3, 4, 5}
my_set.discard(3)
print(my_set)  # Вывод: {1, 2, 4, 5}
            
# Если элемента нет в множестве, ошибки не будет
my_set.discard(6)
print(my_set)  # Вывод: {1, 2, 4, 5}
        

6.2 Функции pop() и clear()

Еще часто используют такие функции как pop() и clear()

Метод pop()

Метод pop() удаляет и возвращает случайный элемент из множества. Если множество пустое, возникает ошибка KeyError.


my_set = {1, 2, 3, 4, 5}
removed_element = my_set.pop()
print(removed_element)   # Вывод: Один из элементов множества, например, 1
print(my_set)  # Вывод: Оставшиеся элементы множества, например, {2, 3, 4, 5}
            
# Если множество пустое, возникает ошибка
empty_set = set()
empty_set.pop()  # KeyError: 'pop from an empty set'
        

Пример: Удаление всех элементов из множества с помощью pop()

Метод pop() может быть использован в цикле для поочередного удаления всех элементов из множества, пока оно не станет пустым.


my_set = {1, 2, 3, 4, 5}
print("Исходное множество:", my_set)
            
while my_set:
    removed_element = my_set.pop()
    print(f"Удален элемент: {removed_element}, Оставшиеся элементы: {my_set}")
            
print("Множество пустое:", my_set)
        

Вывод


Исходное множество: {1, 2, 3, 4, 5}
Удален элемент: 1, Оставшиеся элементы: {2, 3, 4, 5}
Удален элемент: 2, Оставшиеся элементы: {3, 4, 5}
Удален элемент: 3, Оставшиеся элементы: {4, 5}
Удален элемент: 4, Оставшиеся элементы: {5}
Удален элемент: 5, Оставшиеся элементы: set()
Множество пустое: set()
        

Метод clear()

Метод clear() удаляет все элементы из множества, делая его пустым.

Пример


my_set = {1, 2, 3, 4, 5}
my_set.clear()
print(my_set)  # Вывод: set()
        

6.3 Использование оператора del

Оператор del в Python используется для удаления объектов. При работе с множествами оператор del может применяться для удаления самого множества целиком, освобождая память. Ниже будет пара примеров использования оператора del для работы с множествами.

Удаление множества

Когда оператор del используется для удаления множества, это множество больше не существует, и все его элементы удаляются из памяти


my_set = {1, 2, 3, 4, 5}
print("Исходное множество:", my_set)
            
# Удаление множества
del my_set
            
# Попытка доступа к удаленному множеству вызовет ошибку
# print(my_set) # NameError: name 'my_set' is not defined
        

В этом примере множество my_set удаляется с помощью оператора del. После этого любая попытка доступа к my_set вызовет ошибку NameError, поскольку объект больше не существует.

2
Задача
Модуль 1: Python Core, 6 уровень, 5 лекция
Недоступна
Котовасия
Котовасия
2
Задача
Модуль 1: Python Core, 6 уровень, 5 лекция
Недоступна
Фруктовица
Фруктовица
Комментарии (19)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
23 октября 2025

name_set = {'Мурзик', 'Вася', 'Степаша', 'Барсик', 'Василиса'}
сount_chance = 0

while name_set:
    user_input_name = input('Введите предполагаемое имя кота: ').capitalize()
    сount_chance += 1

    if user_input_name in name_set:
        name_set.remove(user_input_name)
        print(f'Верно! Осталось угадать {len(name_set)} кот(ов).')
    else:
        print('Такого имени нет! Попробуйте ещё раз.')
        
print(f'Ура! Все коты угаданы. Потребовалось {сount_chance} попыток.')
DmUr Уровень 16
1 августа 2025
В Python 3.12 - Метод pop() удаляет и возвращает случайный постоянно первый элемент из множества.

for i in range(500):
    my_set = {1, 2, 3, 4, 5}
    removed_element = my_set.pop()
    print(f"Попытка: {i+1}, Удален: {removed_element}, Осталось: {my_set}" )    

Результат: Попытка: 1, Удален: 1, Осталось: {2, 3, 4, 5} Попытка: 2, Удален: 1, Осталось: {2, 3, 4, 5} Попытка: 3, Удален: 1, Осталось: {2, 3, 4, 5} Попытка: 4, Удален: 1, Осталось: {2, 3, 4, 5} Попытка: 5, Удален: 1, Осталось: {2, 3, 4, 5} Попытка: 6, Удален: 1, Осталось: {2, 3, 4, 5} ....... Попытка: 289, Удален: 1, Осталось: {2, 3, 4, 5} Попытка: 290, Удален: 1, Осталось: {2, 3, 4, 5} Попытка: 291, Удален: 1, Осталось: {2, 3, 4, 5} Попытка: 292, Удален: 1, Осталось: {2, 3, 4, 5} Попытка: 293, Удален: 1, Осталось: {2, 3, 4, 5} ............. Попытка: 497, Удален: 1, Осталось: {2, 3, 4, 5} Попытка: 498, Удален: 1, Осталось: {2, 3, 4, 5} Попытка: 499, Удален: 1, Осталось: {2, 3, 4, 5} Попытка: 500, Удален: 1, Осталось: {2, 3, 4, 5}
shinobi Уровень 19
25 июля 2025
Во второй задаче валидатор хромает, надо чинить. Мой код:

fruits = {"apple", "banana"}
while fruits:
    x = input("fruit: ")
    if x in fruits:
        fruits.discard(x)
        print(fruits)
Мой код продолжает работать, даже если пользователь ввёл неверный фрукт, и просто спрашивает заново название, поскольку инпут находится в while, а while работает пока множество не пустое. Но валидатор с этим не согласен, и почему то считает, что программа перестаёт выполняться, если фрукта нет. И да, я знаю, можно убрать if вообще, но суть не в этом, а в том, что валидатор неправ.
shinobi Уровень 19
25 июля 2025
И сразу добавлю вторую ошибку, не знаю в валидаторе самом или условии, но вот такой код ПРОХОДИТ валидатор

fruits = {"apple", "banana"}
while fruits:
    x = input("fruit: ")
    fruits.discard(x)
    print(fruits)
НО откройте картинку мою выше с условиями, где написано, что множество должно выводиться "Обновлённое", в моём же коде множество выводится в любом случае, даже если пользователь ввёл неверно и ничего не удалил, т.е. старое множество, а не "обновленное", но валидатор задачу пропустил, а значит либо ошибка валидатора,либо условия. Уважаемый автор курса, закончу я свой комментарий такими словами: Либо штаны наденьте, либо крестик снимите!
AlterAyrol Уровень 25
20 октября 2025
ну тут не только к автору курса и к условиям задачи вопросы... Зачем в коде while? В условии не казано, что требуется выполнять запросы пока есть фрукты. Второй вопрос: зачем был if x in fruits если discard тем и отличается от remove, что не выдаёт ошибку, поэтому выполнять проверку на наличие элемента не обязательно. Сделал так и сразу приняло: a = {"яблока", "груша", "персик"} for_del = input() a.discard(for_del) print(a) P.S. точнее приняло со второго раза😅 Хотел проверить валидатор и во фрукты добавил "молоко" и "картошку"🤣
Олег Никулин Уровень 69
22 марта 2025
Котовасия при запуске пишет: Проверьте ваш код, похоже вы используете бесконечный цикл Но проверку проходит..
Denis Shutov Уровень 9
4 августа 2025
Потому что имена, которые ты задаешь, могут не совпадать с введенными "пользователем". Но т.к. программа написана верно, валидатор пропускает её
Anonymous #2923722 Уровень 21
29 января 2025
описание первой задачи конечно отвратительно составлено. при модерации проверяется наличие распечаток в разных ветках алгоритма, но об их обязательном наличии ни слова. печатать количество попыток при проверке подсказывают то общее, то успешные. в общем - не доработанное условие
Assator Уровень 23
28 января 2025
Количество решений задач тает на глазах)))
Алексей Орлов Уровень 18
22 января 2025
Я бы еще ввел приведение к регистру в 2-х задачах, так как ввод может быть любой, а проверка проходит только по полному соответствию.

name = input() # муРзик
cat_name = name.capitalize() # первый символ приведен к верхнему регистру, а остальные символы – к нижнему регистру,
print(cat_name) # Мурзик

name = input() # МуРзик
cat_name = name.lower() # все символы приведены к нижнему регистру
print(cat_name) # мурзик

name = input() # мурзик
cat_name = name.upper() # все символы приведены к верхнему регистру
print(cat_name) # МУРЗИК
Mr.Robot Уровень 21 Expert
18 января 2025
Я вот и сделал сверку через if лишнюю почем зря во фруктовщине. И удивительно - хоть все замечательно отработало на тесте, задача не прошла с первого раза. Заставили добавить continue, хотя и без него цикл не прерывался...
Александр Уровень 19 Expert
18 января 2025
во фруктовнице не мудрите. просто удаляйте введенный элемент и выводите результат ))) а то я еще проверял, есть ли такой элемент. уже на воду дуешь с их буквальным требованием выполнения пунктов задания. вот этот пункт меня смутил: • Программа должна вывести обновленное множество после удаления фрукта. так, думаю я, меня не подловишь, я уже стреляный воробей, раз должна выводить множество после удаления фрукта, значит если фрукт не подошел, а значит удаления не было, то и выводить множество не надо ! а вот фиг, подумали они, и добавили уточнение, которое вы увидите только неправильно выполнив задачу ))), что и удалять и выводить нужно в любом случае )))
Serg_am Уровень 1
17 января 2025
Метод pop() удаляет и возвращает случайный элемент из множества. Если множество пустое, возникает ошибка KeyError.

my_set = {1, 2, 3, 4, 5}
removed_element = my_set.pop()
print(removed_element)   # Вывод: Один из элементов множества, например, 1
print(my_set)  # Вывод: Оставшиеся элементы множества, например, {2, 3, 4, 5}
Я много раз пробовал запускать этот код и всегда удаляется и возвращается 1й элемент! почему так? значит не совсем случайный? может который первый по хешу и идет? и с примером с числами побольше тоже самое