Python’s S.symmetric_difference_update (t) Определяет все элементы, которые находятся в одном из двух наборов S или T и обновления набор S с этими элементами.
Вот минимальный пример, где мы обновляем существующие Установить состоит из элементов 1 и 4, которые находятся в одном из двух наборов S и T Отказ
>>> s = {1, 2, 3}
>>> t = {2, 3, 4}
>>> s.symmetric_difference_update(t)
>>> s
{1, 4}Вот еще один визуальный пример из Гарри Поттера: Есть хорошие волшебники, плохие волшебники и волшебники, которые оба. Симметричная разница между этими двумя наборами состоит из всех волшебников, которые являются либо хорошими или плохими, но не оба – как профессор Снейп.
>>> good = {'ron', 'harry', 'hermione', 'dumbledore', 'snape'}
>>> bad = {'grindewald', 'voldemort', 'malfoy', 'snape'}
>>> good.symmetric_difference_update(bad)
>>> good
{'ron', 'hermione', 'dumbledore', 'harry', 'grindewald', 'voldemort', 'malfoy'}Синтаксис
Давайте погрузимся в формальный синтаксис set.symmetric_difference_update () метод.
set.symmetric_difference_update(set)
| задавать | Множество | Набор, который следует использовать в качестве основы для симметричных разных вычислений |
Возвращаемое значение
Возвращаемое значение set_1.symmetric_difference_update (set_2) это Нет Отказ Но побочный эффект заключается в том, что оригинал Set_1 Теперь содержит элементы, которые ранее существовали в одном из множеств Set_1 или Set_2 Отказ
Усовершенствованные примеры Набор симметричных разных обновлений
Существуют некоторые тонкости, которые вы должны понимать по поводу установленного симметричной функции обновления разности. Давайте погрузимся в них пример!
Простой пример состоит в том, чтобы рассчитать симметричную разницу набора с другим подмножеством и обновлять оригинальный набор соответственно:
>>> s = {1, 2, 3}
>>> s.symmetric_difference_update({1})
>>> s
{2, 3}Но что, если вы инвертируете это и рассчитаете симметричную разницу между подмножеством и суперсетом? В этом случае результатом является тем же набором, что и до того, что он содержит элементы, которые находятся в одном из двух наборов.
>>> s = {1}
>>> s.symmetric_difference_update({1, 2, 3})
>>> s
{2, 3}Можете ли вы вычислить симметричную разницу между набором и пустым набором? Конечно! Но это не изменяет оригинальный набор:
>>> s = {1, 2, 3}
>>> s.symmetric_difference_update(set())
>>> s
{1, 2, 3}Установить Symmetric_difference () vs symmetric_difference_uppdate ()
set.symmetric_difference () Метод возвращает новый набор, тогда как set.symmetric_difference_update () Работает на множестве, он вызывается и возвращает Нет Отказ
s.symmetric_defference (t)– Верните новый набор с элементами в этом наборе или указанном наборе аргумента, но не элементы, которые являются членами обоих.с.Симметричный_Разница_update (t)– Замените этот набор с помощью симметричной разницы, то есть элементы в этом наборе, либо указанный набор аргументом, но не элементы, которые являются членами обоих.
Вот пример, который показывает симметричный разностный метод:
>>> s = {1, 2, 3}
>>> t = s.symmetric_difference({1, 2})
>>> s
{3}И set.symmetric_difference_update () Обновления на существующем наборе S И ничего не возвращает:
>>> s = {1, 2, 3}
>>> s.symmetric_difference_update({1, 2})
>>> s
{3}Что такое временная сложность SET.Symmetric_difference_update ()?
Сложность времени выполнения set.symmetric_difference_update () Функция на комплекте с N Элементы и установленный аргумент с м Элементы это O (m + n) Поскольку вам нужно проверить каждый элемент в обоих наборах, является ли он элемент другого набора. Проверка членства – O (1) Так что сложность выполнения – это O (N) * O (1) + O (M) * (N + M) Отказ
Вы можете увидеть это в следующем простом эксперименте, в котором мы запускаем метод набора несколько раз для увеличения размеров набора:
Я провел этот эксперимент на моем Acer Aspire 5 ноутбук (Я знаю) с Intel Core I7 (8-й GEN) процессор и 16 ГБ памяти. Вот код эксперимента:
import matplotlib.pyplot as plt
import random
import time
sizes = [i * 10**5 for i in range(50)]
runtimes = []
for size in sizes:
s = set(range(size))
t = set(range(0, size, 2))
# Start track time ...
t1 = time.time()
s.symmetric_difference(t)
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 One-listers (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.
Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.