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

Установить различия Python пересечение, объединение и разница в наборах в Python.

Давайте поговорим о трех замечательных операционных наборах, которые предоставляют нам, используя Python. Tagged with Python, Sets, Beginters.

Я хотел поговорить о Наборы и четыре отличных операция, которые они предоставляют:

  • Пересечение : Элементы два набора имеют общее.
  • Союз : Все элементы из обоих наборов.
  • Разница : Элементы, присутствующие на одном наборе, но не на другом.
  • Симметричная разница : Элементы из обоих наборов , этого не присутствует на другом.

Мы собираемся сделать это с помощью Python (3.7) , потому что это правит!

Итак, давайте погрузимся прямо в это.

Некоторое базовое понимание наборов.

Наборы – это структуры данных Это, основываясь на конкретных правилах, они определяют, обеспечивают определенные прохладные операции и гарантируют, что при использовании их.

Два основных правила, которые мы должны знать, – это:

  • Элементы в наборе уникальны. У нас не может быть набор, который содержит два равных элемента.
  • Элементы в наборе не заказаны. В зависимости от реализации, элементы могут быть отсортированы с использованием хэша хранимых значений, но когда вы используете наборы, вам необходимо предположить, что элементы упорядочены случайным образом.

И прохладная гарантия, которую они предоставляют нам: проверка, если элемент присутствует на наборе, есть Постоянная сложность времени (O (1)) , всегда. Это означает, что проверяет, содержит ли набор элемент Супер быстро Анкет

Самая популярная реализация набора, используемого для достижения этого, – это хэшированный набор . Упрощено, это в основном хранит элементы в магазине ключей, где ключ представляет собой хэш хранимых значений.

Итак, чтобы создать набор в Python, мы используем конструктор установить который получает любое итерабильное: my_pets (['dog', 'cat', 'Parrot']) (Нет, у меня нет ни попугая, ни кошки, собак здесь).

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

Наборы являются коллекциями , следовательно, Они итерационные :

my_pets = set(['dog', 'cat', 'parrot'])
for pet in my_pets:
    print('Hello, {}!'.format(pet))

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

Hello, dog!
Hello, parrot!
Hello, cat!

Итак, с этой информацией давайте просто погрузимся в эти крутые операции.

Пересечение

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

Например, если я рассчитываю пересечение между {1, 2, 3} и {2, 3, 4} , выход будет {2, 3} Анкет

Если это поможет вам понять, вот наивная реализация в Python:

a = set([1, 2, 3])
b = set([2, 3, 4])
result = {element for element in a if element in b}
print(result)

Человек, Python потрясающий что ли? Конечно, это будет печатать {2, 3} как и ожидалось. Во всяком случае, это было неактуально, потому что Python обеспечивает функцию для выполнения этого как часть своей стандартной библиотеки. То же самое можно получить со следующим:

a = set([1, 2, 3])
b = set([2, 3, 4])
result = a.intersection(b)
print(result)

Обратите внимание, что из -за характера операции A.Intersection (b) и B.Intersection (а) то же самое. Это коммутативная операция.

Союз

Союз между двумя подходами приводит к третьему набору со всеми элементами из обоих наборов.

Например, если я рассчитываю союз между {1, 2, 3} и {2, 3, 4} , выход будет {1, 2, 3, 4} Анкет Вроде как сознание, но имея в виду, что набор не может иметь повторяющихся элементов.

Опять же, давайте посмотрим на наивную реализацию в Python:

a = set([1, 2, 3])
b = set([2, 3, 4])
c = set()

for element in a: 
    c.add(element)

for element in b: 
    c.add(element)

print(c)

Как и ожидалось, вывод {1, 2, 3, 4} Анкет Опять же, однако, Python обеспечивает нативную функцию для этого:

a = set([1, 2, 3])
b = set([2, 3, 4])
c = a.union(b)
print(c)

Обратите внимание, что из -за характера операции A.Union (B) и B.Union (A) то же самое. Это коммутативная операция.

Разница

Разница между двумя наборами приводит к третьему набору с элементом с первого, которые не присутствуют на втором. Прямо сейчас я скажу вам, эта операция не коммутативна.

Например, если у меня есть набор a = {1, 2, 3} и набор b = {2, 3, 4} , разница между A и B это {1} и разница между б и это {4} Анкет

Вот наивная реализация:

a = set([1, 2, 3])
b = set([2, 3, 4])
c = {element for element in a if element not in b}
print(c)

Это выводит {1} Как и ожидалось, и будет печатать {4} Если мы инвертируем A и b Анкет Опять же, реализация с использованием стандартной библиотеки Python:

a = set([1, 2, 3])
b = set([2, 3, 4])
c = a.difference(b)
print(c)

Симметричная разница

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

Например, если я вычисляю симметричную разницу между {1, 2, 3} и {2, 3, 4} , выход будет {1, 4} Анкет Эта операция является коммутативной.

Вот наивная реализация:

a = set([1, 2, 3])
b = set([2, 3, 4])
c = set()

for element in a:
    if element not in b:
        c.add(element)

for element in b:
    if element not in a:
        c.add(element)

print(c)

Приведенная выше реализация будет печатать {1, 4} , как и ожидалось. Конечно, у Python это также на своей стандартной Libary: symmetric_difference Анкет

a = set([1, 2, 3])
b = set([2, 3, 4])
c = a.symmetric_difference(b)
print(c)

Вывод

Наборы действительно полезны, и на самом деле довольно веселые. Попробуйте. Я жил много времени, ограниченного списками, и когда я наконец сел и узнал, как работать с наборами, начал находить лучшие, более элегантные решения многих проблем.

Оригинал: “https://dev.to/svinci/intersection-union-and-difference-of-sets-in-python-4gkn”