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

Contents
Введение
Пример создания
Создание пустого множества
Создание множества из списка
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

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

Search on this site

Subscribe to @aofeed channel for updates

Visit Channel

@aofeed

Feedback and Questions in Telegram

@aofeedchat