Рубрики
Без рубрики

Python Set Удалить ()

Метод Python Set.Remove (X) Удаляет элемент X из этого набора, если он является членом, в противном случае он поднимает a jeeRror. https://youtu.be/Cgsreoyg710 Вот минимальный пример, в котором вы удаляете строковый элемент «Боб» из множества с помощью метода S.Remove (): >>> S = {«Алиса», «Боб», «Cloe»} >>> S. Удалить («Боб») >>> S {‘Alice’, ‘Cloe’} Синтаксис Давайте … Установите Python Удалить () Подробнее »

Автор оригинала: Chris.

Python’s Set.Remove (X) Способ удаляет элемент х Из этого набора, если это член, в противном случае он поднимает KeyError Отказ

Вот минимальный пример, где вы удаляете элемент строки «Боб» от установленного с помощью S.Remove () Метод:

>>> s = {'Alice', 'Bob', 'Cloe'}
>>> s.remove('Bob')
>>> s
{'Alice', 'Cloe'}

Синтаксис

Давайте погрузимся в формальный синтаксис Set.Remove () метод.

set.remove(element)
элемент Hashable объект Элемент, который будет удален из набора.

Возвращаемое значение набора Удалить ()

Возвращаемое значение Set.Remove () это Нет Отказ

set.discard () vs set.remove ()

set.discard () Метод похож на Set.Remove () метод. Оба метода предпринимают элемент для удаления в качестве аргумента и удалить этот элемент от установленного набора, на который их называют. Если элемент будет удален, существует в наборе, методы имеют одинаковое поведение.

💡  Разница между set.discard () и Set.Remove () Это set.discard () не вызывает ошибку тогда как Set.Remove () поднимает Keyerror. Если элемент будет удален, не является членом набора.

В результате ничего плохого не происходит, если вы отбросить тот же элемент дважды:

>>> s = {'Alice', 'Bob', 'Cloe'}
>>> s.discard('Bob')
>>> s.discard('Bob')
>>> s
{'Alice', 'Cloe'}

Однако, если вы Удалить Тот же элемент дважды, Python поднимает KeyError Как только элемент не является членом набора больше:

>>> s = {'Alice', 'Bob', 'Cloe'}
>>> s.remove('Bob')
>>> s.remove('Bob')
Traceback (most recent call last):
  File "", line 1, in 
    s.remove('Bob')
KeyError: 'Bob'

В большинстве случаев вы не хотите, чтобы это поведение, поэтому я рекомендую вам использовать Откажитесь от () Способ по умолчанию для удаления элементов из набора, а не реализован более сложный попробуй/кроме Логика для обработки ошибки.

Python Set Удалить Если существует

Удалить элемент х Из набора, если он существует, используйте set.discard (x) не set.remove (x) метод. В отличие от set.remove (x) , метод set.discard (x) не поднимает Keyerror. Если элемент не существует.

>>> s = {'Alice', 'Bob', 'Liz'}

# Element exists:
>>> s.discard('Alice')

# Element doesn't exist:
>>> s.discard('Alice')
>>> s
{'Liz', 'Bob'}

Python Set Удалить и вернуться

Чтобы удалить произвольный элемент из набора и вернуть элемент, используйте метод S.POP (X) Отказ

>>> s = {'Alice', 'Bob', 'Liz'}
>>> s.pop()
'Alice'

Python Set Удалить несколько элементов

Проблема формулировки : Учитывая набор и счетчику элементов, которые вы хотите удалить из набора. Но вы не хотите, чтобы Python поднять ошибку, если установленные элементы нет. Другими словами, Как удалить несколько элементов из набора?

💡  Чтобы удалить несколько элементов из набора, используйте set.difference_update (элементы) метод. Этот метод удаляет все элементы, которые также являются членами набора. Если ни один из элементов не является членом, метод ничего не делает.

Вот пример set.difference_update () Способ удаления нескольких элементов:

>>> s = {1, 2, 3, 'Alice', 'Bob', 'Carl'}
>>> to_remove = {1, 'Alice', 'Bob'}
>>> s.difference_update(to_remove)
>>> s
{2, 3, 'Carl'}

Я нахожу этот метод, превосходящий петлю по всем элементам, которые будут удалены, потому что оно более лаконично:

>>> s = {1, 2, 3, 'Alice', 'Bob', 'Carl'}
>>> to_remove = {1, 'Alice', 'Bob'}
>>> for element in to_remove:
	s.discard(element)

	
>>> s
{2, 3, 'Carl'}

Сколько времени сложность Set.Remove ()?

Сложность времени выполнения Set.Remove () Функция на комплекте с N Элементы это O (1) . Итак, Python’s Set.Remove () Метод имеет Постоянная сложность времени выполнения Отказ Причина в том, что Установить членство Имеет постоянную сложность времени выполнения из-за реализации хэш-таблицы – и учитывая рассматриваемый элемент, мы можем легко удалить его из набора, не глядя на все элементы в наборе.

Вы можете увидеть это в следующем простом эксперименте, в котором мы запускаем метод SET несколько раз для увеличения числа заданных элементов.

Я провел этот эксперимент на моем Acer Aspire 5 ноутбук (Я знаю) с Intel Core I7 (8-й GEN) процессор и 16 ГБ памяти. Вот код эксперимента:

import matplotlib.pyplot as plt
import time

sizes = [i * 10**5 for i in range(50)]
runtimes = []

for size in sizes:
    s = set(range(size))

    # Start track time ...
    t1 = time.time()
    s.remove(size-99)
    t2 = time.time()
    # ... end track time
    
    runtimes.append(t2-t1)


plt.plot(sizes, runtimes)
plt.ylabel('Runtime (s)')
plt.xlabel('Set Size')

plt.show()

Другие методы набора Python

Все Установить методы называются данными Установить Отказ Например, если вы создали набор S = {1, 2, 3} Вы бы назвали S.CLEAR () Чтобы удалить все элементы набора. Мы используем термин «Этот набор» обратиться к множеству, на котором выполняется метод.

Добавить() Добавьте элемент на этот набор
Чисто() Удалите все элементы из этого набора
Копировать () Создать и вернуть плоскую копию этого набора
разница() Создайте и верните новый набор, содержащий все элементы этого набора, кроме те, которые в данных аргументах. Полученный набор имеет максимум максимально возможным элементам, как и любой другой.
Разница_update () Удалите все элементы из этого набора, которые являются членами любого из заданных аргументов.
отказаться() Удалите элемент из этого набора, если он является членом, иначе ничего не сделайте.
Пересечение () Создайте и верните новый набор, который содержит все элементы, которые являются членами всех наборов: это также указано. Отказ
Intersection_Update () Удаляет все элементы из этого набора, которые не являются членами во всех других указанных наборах.
iSdisjoint () Верните true, если ни один элемент из этого набора не является членом любого другого указанного набора. Наборы пересекаются, если и только если их пересечение – это пустой набор.
issubset () Верните True, если все элементы этого набора являются членами указанного набора аргумента.
ОСУПЕРСЕТ () Верните true, если все элементы указанного набора аргумента являются членами этого набора.
поп () Удалить и вернуть случайный элемент из этого набора. Если набор пуст, он поднимет брелок.
Удалить() Удалите и верните определенный элемент из этого набора, как определено в аргументе. Если набор не содержит элемента, он поднимет keyError.
Symmetric_difference () Верните новый набор с элементами в этом наборе или указанном наборе аргумента, но не элементы, которые являются членами обоих.
Symmetric_difference_update () Замените этот набор с помощью симметричной разницы, то есть элементы в этом наборе или указанном наборе аргумента, но не элементы, которые являются членами обоих.
Союз () Создайте и верните новый набор со всеми элементами, которые находятся в этом наборе или в любом из указанных настроек аргументов.
Обновить() Обновите этот набор со всеми элементами, которые находятся в этом наборе, или в любом из указанных настроек аргументов. Полученный набор имеет по меньшей мере, как и любой другой элементы.

Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.

Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python одноклассники (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.

Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.

Оригинал: “https://blog.finxter.com/python-set-remove/”