Аперацыі з наборамі (напрыклад, вызначэнне набораў аб’яднанняў, набораў прадуктаў і падмностваў) з тыпам набору Python

Бізнэс

Python забяспечвае ўбудаваны тып дадзеных set, які апрацоўвае наборы.

Набор тыпаў уяўляе сабой набор элементаў, якія не паўтараюцца (элементы, якія не аднолькавыя па значэнні, унікальныя элементы) і можа выконваць аперацыі з наборамі, такія як набор аб’яднанняў, набор прадуктаў і набор рознасці.

У гэтым раздзеле асноўныя аперацыі ў аперацыях з наборамі тлумачацца з прыкладам кода.

  • Стварэнне наборных аб’ектаў:{},set()
  • задаць абазначэнне ўключэння
  • Колькасць элементаў у наборы:len()
  • Даданне элемента ў набор:add()
  • Выдаліць элемент з набору:discard(),remove(),pop(),clear()
  • Wasset (зліццё, аб’яднанне):|аператар,union()
  • Наборы прадуктаў (агульныя часткі, скрыжаванні, скрыжаванні):& аператар,intersection()
  • адноснае дапаўненне:-аператар,difference()
  • розніца сіметрыі мноства:^ аператар,symmetric_difference()
  • падмноства ці не:<= аператар,issubset()
  • Верхні набор ці не:>= аператар,issuperset()
  • Вызначэнне таго, з’яўляюцца яны ўзаемна простымі ці не:isdisjoint()

Тып набору – гэта зменлівы тып, які можа дадаваць і выдаляць элементы, а таксама ёсць тып замарожанага набора, які мае тую ж аперацыю набору і іншыя метады, што і тып набору, але з’яўляецца нязменным (не можа быць зменены шляхам дадання, выдалення або змены элементаў іншым чынам ).

Стварэнне аб’екта набору::{},set()

Ствараецца хвалевымі дужкамі {}

Аб’екты з наборам тыпаў могуць быць створаны, заключаючы элементы ў дужкі {}.

Калі ёсць паўтаральныя значэнні, яны ігнаруюцца, і ў якасці элементаў застаюцца толькі унікальныя значэнні.

s = {1, 2, 2, 3, 1, 4}

print(s)
print(type(s))
# {1, 2, 3, 4}
# <class 'set'>

У якасці элементаў можна мець розныя тыпы. Аднак аб’екты, якія можна абнаўляць, напрыклад тыпы спісаў, не могуць быць зарэгістраваныя. Картэжы дапускаюцца.

Акрамя таго, паколькі тыпы набораў не ўпарадкаваны, парадак, у якім яны генерыруюцца, не захоўваецца.

s = {1.23, 'abc', (0, 1, 2), 'abc'}

print(s)
# {(0, 1, 2), 1.23, 'abc'}

# s = {[0, 1, 2]}
# TypeError: unhashable type: 'list'

Розныя тыпы, такія як int і float, лічацца дублікатамі, калі іх значэнні эквівалентныя.

s = {100, 100.0}

print(s)
# {100}

Паколькі пустая дужка {} лічыцца тыпам слоўніка, аб’ект тыпу пусты набор (пусты набор) можа быць створаны з дапамогай канструктара, апісанага далей.

s = {}

print(s)
print(type(s))
# {}
# <class 'dict'>

Створаны канструктарам set()

Аб’екты тыпу set могуць быць створаны таксама з дапамогай канструктара set().

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

l = [1, 2, 2, 3, 1, 4]

print(l)
print(type(l))
# [1, 2, 2, 3, 1, 4]
# <class 'list'>

s_l = set(l)

print(s_l)
print(type(s_l))
# {1, 2, 3, 4}
# <class 'set'>

Нязменныя тыпы frozenset ствараюцца з дапамогай канструктара frozenset().

fs_l = frozenset(l)

print(fs_l)
print(type(fs_l))
# frozenset({1, 2, 3, 4})
# <class 'frozenset'>

Калі аргумент апушчаны, ствараецца пусты аб’ект тыпу набора (пусты набор).

s = set()

print(s)
print(type(s))
# set()
# <class 'set'>

Паўторныя элементы можна выдаліць са спісу або картэжа з дапамогай set(), але парадак зыходнага спісу не захоўваецца.

Каб пераўтварыць тып набору ў спіс або картэж, выкарыстоўвайце list(),tuple().

l = [2, 2, 3, 1, 3, 4]

l_unique = list(set(l))
print(l_unique)
# [1, 2, 3, 4]

Глядзіце наступны артыкул для атрымання інфармацыі аб выдаленні паўтаральных элементаў пры захаванні парадку, здабыванні толькі паўтаральных элементаў і апрацоўцы паўтаральных элементаў у двухмерным масіве (спіс спісаў).

задаць абазначэнне ўключэння

Акрамя разумення спісу, ёсць і ўсталяваныя разуменні. Проста заменіце квадратныя дужкі [] на дужкі {} у спісах.

s = {i**2 for i in range(5)}

print(s)
# {0, 1, 4, 9, 16}

Глядзіце наступны артыкул для атрымання дадатковай інфармацыі аб абазначэнні разумення спісу.

Колькасць элементаў у наборы:len()

Колькасць элементаў у наборы можна атрымаць з дапамогай убудаванай функцыі len().

s = {1, 2, 2, 3, 1, 4}

print(s)
print(len(s))
# {1, 2, 3, 4}
# 4

Калі вы хочаце падлічыць колькасць элементаў у кожным спісе, у якім ёсць элементы з паўтаральнымі значэннямі і г.д., глядзіце наступны артыкул.

Даданне элемента ў набор:add()

Каб дадаць элемент у набор, выкарыстоўвайце метад add().

s = {0, 1, 2}

s.add(3)
print(s)
# {0, 1, 2, 3}

Выдаліць элемент з набору:discard(),remove(),pop(),clear()

Каб выдаліць элемент з набору, выкарыстоўвайце метады discard(), remove(), pop() і clear().

Метад discard() выдаляе элемент, указаны ў аргументе. Калі зададзена значэнне, якое не існуе ў наборы, нічога не робіцца.

s = {0, 1, 2}

s.discard(1)
print(s)
# {0, 2}

s = {0, 1, 2}

s.discard(10)
print(s)
# {0, 1, 2}

Метад remove() таксама выдаляе элемент, названы ў аргументы, але вяртаецца памылка KeyError, калі вызначана значэнне, якое не існуе ў наборы.

s = {0, 1, 2}

s.remove(1)
print(s)
# {0, 2}

# s = {0, 1, 2}

# s.remove(10)
# KeyError: 10

Метад pop() выдаляе элементы з набору і вяртае іх значэнні. Немагчыма выбраць, якія значэнні выдаліць. Пусты набор прывядзе да памылкі KeyError.

s = {2, 1, 0}

v = s.pop()

print(s)
print(v)
# {1, 2}
# 0

s = {2, 1, 0}

print(s.pop())
# 0

print(s.pop())
# 1

print(s.pop())
# 2

# print(s.pop())
# KeyError: 'pop from an empty set'

Метад clear() выдаляе ўсе элементы і робіць набор пустым.

s = {0, 1, 2}

s.clear()
print(s)
# set()

Wasset (зліццё, аб’яднанне):|аператар,union()

Набор аб’яднанняў (зліццё, аб’яднанне) можна атрымаць з дапамогай | аператар або метад union().

s1 = {0, 1, 2}
s2 = {1, 2, 3}
s3 = {2, 3, 4}

s_union = s1 | s2
print(s_union)
# {0, 1, 2, 3}

s_union = s1.union(s2)
print(s_union)
# {0, 1, 2, 3}

Для метаду можна задаць некалькі аргументаў. У дадатак да тыпу набору, спісы і картэжы, якія могуць быць пераўтвораны ў тып набору з дапамогай set(), таксама могуць быць вызначаны ў якасці аргументаў. Тое ж самае тычыцца наступных аператараў і метадаў.

s_union = s1.union(s2, s3)
print(s_union)
# {0, 1, 2, 3, 4}

s_union = s1.union(s2, [5, 6, 5, 7, 5])
print(s_union)
# {0, 1, 2, 3, 5, 6, 7}

Наборы прадуктаў (агульныя часткі, скрыжаванні, скрыжаванні):& аператар,intersection()

Набор прадуктаў (агульная частка, скрыжаванне і скрыжаванне) можна атрымаць з дапамогай & аператар або метад intersection().

s_intersection = s1 & s2
print(s_intersection)
# {1, 2}

s_intersection = s1.intersection(s2)
print(s_intersection)
# {1, 2}

s_intersection = s1.intersection(s2, s3)
print(s_intersection)
# {2}

адноснае дапаўненне:-аператар,difference()

Набор розніцы можна атрымаць з дапамогай аператара – або метаду розніцы().

s_difference = s1 - s2
print(s_difference)
# {0}

s_difference = s1.difference(s2)
print(s_difference)
# {0}

s_difference = s1.difference(s2, s3)
print(s_difference)
# {0}

розніца сіметрыі мноства:^ аператар,symmetric_difference()

Сіметрычны набор розніцы (набор элементаў, які змяшчаецца толькі ў адным з двух) можна атрымаць з дапамогай аператара ^ або symmetric_difference().

Эквівалент выключнай дыз’юнкцыі (XOR) у лагічных аперацыях.

s_symmetric_difference = s1 ^ s2
print(s_symmetric_difference)
# {0, 3}

s_symmetric_difference = s1.symmetric_difference(s2)
print(s_symmetric_difference)
# {0, 3}

падмноства ці не:<= аператар,issubset()

Каб вызначыць, ці з’яўляецца набор падмноствам іншага набору, выкарыстоўвайце аператар <= або метад issubset().

s1 = {0, 1}
s2 = {0, 1, 2, 3}

print(s1 <= s2)
# True

print(s1.issubset(s2))
# True

І аператар <=, і метад issubset() вяртаюць праўду для эквівалентных набораў.

Каб вызначыць, ці з’яўляецца гэта сапраўдным падмноствам, выкарыстоўвайце аператар <=, які вяртае ілжыва для эквівалентных набораў.

print(s1 <= s1)
# True

print(s1.issubset(s1))
# True

print(s1 < s1)
# False

Верхні набор ці не:>= аператар,issuperset()

Каб вызначыць, ці з’яўляецца адзін набор надмноствам іншага, выкарыстоўвайце аператар >= або issuperset().

s1 = {0, 1}
s2 = {0, 1, 2, 3}

print(s2 >= s1)
# True

print(s2.issuperset(s1))
# True

І аператар >=, і метад issuperset() вяртаюць праўду для эквівалентных набораў.

Каб вызначыць, ці з’яўляецца гэта сапраўдным супермноствам, выкарыстоўвайце аператар >=, які вяртае false для эквівалентных набораў.

print(s1 >= s1)
# True

print(s1.issuperset(s1))
# True

print(s1 > s1)
# False

Вызначэнне таго, з’яўляюцца яны ўзаемна простымі ці не:isdisjoint()

Каб вызначыць, ці з’яўляюцца два мноства простых адзін да аднаго, выкарыстоўвайце метад isdisjoint().

s1 = {0, 1}
s2 = {1, 2}
s3 = {2, 3}

print(s1.isdisjoint(s2))
# False

print(s1.isdisjoint(s3))
# True
Copied title and URL