set: Множества в Python

Содержание
Введение
Пример создания
Создание пустого множества
Создание множества из списка
Iteration: перебор элементов множества
in, not in
Добавление элементов во множество
Уникальность элементов
Похожие статьи

Введение

Множество - это неупорядоченная коллекция уникальных элементов.

Сами множества изменяемы (mutable).

Элементы множества должны быть неизменяемы (immutable).

Чтобы создать множество нужно воспользоваться фигурными скобками {} либо функцией set()

{element1, element2}

Пример

p = {6, 28, 496, 8128, 33550336} print("p: ", p) print("type(p): ", type(p))

p: {33550336, 8128, 496, 6, 28} type(p): <class 'set'>

Создание пустого множества

Так как пустые фигурные скобки создают словарь для создания пустого множества используется функция set(). Это произошло по историческим причинам - словари появились в Python версии 0.9.0 а множества, если верить wikibooks только в версии 2.3

Я сам не проверял, но здесь можно скачать версию 0.9.1 а здесь изучить её код и проверить. Интересная статья на medium

# Since {} creates empty dict use # set() to created empty set e = set() print("e: ", e) print("type(e): ", type(e))

e: set() type(e): <class 'set'>

Создание множества из списка

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

# set can be created from a list s = set([2, 4, 16, 64, 4096, 65536, 262144]) print("s: ", s) # it removes duplicates from list t = [1, 4, 2, 1, 7, 9, 9] print("t: ", t) print("set(t): ", set(t))

s: {4096, 64, 2, 65536, 4, 262144, 16} t: [1, 4, 2, 1, 7, 9, 9] set(t): {1, 2, 4, 7, 9}

Итерация по множествам

Множество это итерируемый объект . Его элементы можно перебирать циклом for

# sets are iterable s = {1, 2, 4, 8, 16, 32} for x in s: print(x)

32 1 2 4 8 16

С помощью функции iter() множество можно сделать итератором

# sets are iterable s = {1, 2, 4, 8, 16, 32} it = iter(s) print(next(it)) print(next(it))

32 1

in и not in

# in and not in q = {2, 9, 6, 4} print("q: ", q) print("3 in q: ", 3 in q) print("3 not in q: ", 3 not in q) print("7 in q: ", 7 in q) print("7 not in q: ", 7 not in q)

q: {9, 2, 4, 6} 3 in q: False 3 not in q: True 7 in q: False 7 not in q: True

Добавление элементов во множество

# adding elements k = {81, 108} print("k: ", k) k.add(54) print("k: ", k) k.add(12) print("k: ", k) k.add(108) print("k: ", k) k.update([37, 128, 97]) print("k: ", k)

k: {81, 108} k: {81, 108, 54} k: {81, 108, 12, 54} k: {81, 108, 12, 54} k: {128, 97, 37, 108, 12, 81, 54}

# removing elements # if element is not in set removing it # results in error, try: # k.remove(98) k.discard(98) print("k: ", k) # copy set j = k.copy() # shallow copy print("j: ", j) # algebra blue_eyes = {'Olivia', 'Harry', 'Lilly', 'Jack', 'Amelia'} blond_hair = {'Harry', 'Jack', 'Amelia', 'Mia', 'Joshua'} smell_hcn = {'Harry', 'Amelia'} taste_ptc = {'Harry', 'Lily', 'Amelia', 'Lola'} o_blood = {'Mia', 'Joshua', 'Lily', 'Olivia'} b_blood = {'Amelia', 'Jack'} a_blood = {'Harry'} ab_blood = {'Joshua', 'Lola'} # union print("blue_eyes: ", blue_eyes) print("blond_hair: ", blond_hair) print("blue_eyes.union(blond_hair): ", blue_eyes.union(blond_hair)) print(blue_eyes.union(blond_hair) == blond_hair.union(blue_eyes)) # intersection print("blue_eyes.intersection(blond_hair): ", blue_eyes.intersection(blond_hair)) print(blue_eyes.intersection(blond_hair) == blond_hair.intersection(blue_eyes)) # difference print("blond_hair.difference(blue_eyes): ", blond_hair.difference(blue_eyes)) print(blond_hair.difference(blue_eyes) == blue_eyes.difference(blond_hair)) # False # symmetric difference # it is commutative print("blond_hair.symmetric_difference(blue_eyes): ", blond_hair.symmetric_difference(blue_eyes)) print(blond_hair.symmetric_difference(blue_eyes) == blue_eyes.symmetric_difference(blond_hair)) # True # issubset, issuperset print("blond_hair: ", blond_hair) print("smell_hcn ", smell_hcn) print("smell_hcn.issubset(blond_hair): ", smell_hcn.issubset(blond_hair)) # True print("taste_ptc: ", taste_ptc) print("taste_ptc.issuperset(smell_hcn): ", taste_ptc.issuperset(smell_hcn)) # True # isdisjoint - no members in common print("a_blood: ", a_blood) print("o_blood: ", o_blood) print("a_blood.isdisjoint(o_blood): ", a_blood.isdisjoint(o_blood)) # True

k: {128, 97, 37, 108, 12, 81, 54} j: {128, 97, 81, 37, 54, 108, 12} blue_eyes: {'Lilly', 'Jack', 'Amelia', 'Olivia', 'Harry'} blond_hair: {'Jack', 'Amelia', 'Mia', 'Joshua', 'Harry'} blue_eyes.union(blond_hair): {'Amelia', 'Olivia', 'Lilly', 'Jack', 'Mia', 'Joshua', 'Harry'} True blue_eyes.intersection(blond_hair): {'Jack', 'Amelia', 'Harry'} True blond_hair.difference(blue_eyes): {'Joshua', 'Mia'} False blond_hair.symmetric_difference(blue_eyes): {'Lilly', 'Mia', 'Joshua', 'Olivia'} True blond_hair: {'Jack', 'Amelia', 'Mia', 'Joshua', 'Harry'} smell_hcn {'Amelia', 'Harry'} smell_hcn.issubset(blond_hair): True taste_ptc: {'Lola', 'Lily', 'Amelia', 'Harry'} taste_ptc.issuperset(smell_hcn): True a_blood: {'Harry'} o_blood: {'Mia', 'Olivia', 'Lily', 'Joshua'} a_blood.isdisjoint(o_blood): True

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

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

data = {1, True, 1.0} print(len(data))

1

Похожие статьи
Built-in Collections
Строки
f-string
format string
Списки []
list comprehension: Абстракция списка
Словари {:}
dict comprehension: Абстракция словаря
Множества {}
set comprehension: Абстракция множества
Кортежи ()
Протоколы
Итерация
Python
if, elif, else
Циклы

Поиск по сайту

Подпишитесь на Telegram канал @aofeed чтобы следить за выходом новых статей и обновлением старых

Перейти на канал

@aofeed

Задать вопрос в Телеграм-группе

@aofeedchat

Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@urn.su если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящую по тематике.
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь с нами по электронной почте
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......
5. Статьи можно расшарить в соцсетях, нажав на иконку сети: