logo

Набори на Python

Набір у програмуванні на Python — це невпорядкований тип колекції даних, який можна ітерувати, змінювати та не мати повторюваних елементів.

Набір представлено { } (значення взяті у фігурні дужки)



Основна перевага використання набору, на відміну від a список , полягає в тому, що він має оптимізований метод для перевірки, чи міститься певний елемент у наборі. Це базується на структурі даних, відомій як хеш-таблиця. Оскільки набори не впорядковані, ми не можемо отримати доступ до елементів за допомогою індексів, як у списках.

Приклад наборів Python

Python3








var>=> {>'Geeks'>,>'for'>,>'Geeks'>}> type>(var)>

>

>

Вихід:

set>

Часова складність: O(1)
Допоміжний простір: O(1)

Приведення типу за допомогою методу Python Set

Для приведення типу використовується метод Python set().

Python3




# typecasting list to set> myset>=> set>([>'a'>,>'b'>,>'c'>])> print>(myset)> # Adding element to the set> myset.add(>'d'>)> print>(myset)>

>

>

Вихід:

Набір Python є невпорядкованим типом даних, що означає, що ми не можемо знати, в якому порядку зберігаються елементи набору.

{'c', 'b', 'a'} {'d', 'c', 'b', 'a'}>

Часова складність: O(n)
Допоміжний простір: O(n)

Перевірте унікальність і незмінність за допомогою Python Set

Набори Python не можуть мати повторювані значення, і коли вони створені, ми не можемо змінити їх значення.

Python3




# Python program to demonstrate that> # a set cannot have duplicate values> # and we cannot change its items> # a set cannot have duplicate values> myset>=> {>'Geeks'>,>'for'>,>'Geeks'>}> print>(myset)> # values of a set cannot be changed> myset[>1>]>=> 'Hello'> print>(myset)>

>

>

Вихід:

Перший код пояснює, що набір не може мати повторюване значення. Кожен предмет у ньому є унікальною цінністю.

Другий код генерує помилку, оскільки ми не можемо призначити або змінити значення після створення набору. Ми можемо лише додавати або видаляти елементи в наборі.

{'Geeks', 'for'} TypeError: 'set' object does not support item assignment>

Гетерогенний елемент із набором Python

Набори Python можуть зберігати в ньому неоднорідні елементи, тобто набір може зберігати суміш рядкових, цілих, логічних тощо типів даних.

Python3




# Python example demonstrate that a set> # can store heterogeneous elements> myset>=> {>'Geeks'>,>'for'>,>10>,>52.7>,>True>}> print>(myset)>

>

>

Вихід:

{True, 10, 'Geeks', 52.7, 'for'}>

Часова складність: O(n)
Допоміжний простір: O(n)

Заморожені набори Python

Заморожені набори у Python — це незмінні об’єкти, які підтримують лише методи й оператори, які створюють результат, не впливаючи на заморожений набір чи набори, до яких вони застосовуються. Це можна зробити за допомогою методу frozenset() у Python.

Хоча елементи набору можна змінити в будь-який час, елементи замороженого набору залишаються незмінними після створення.

Якщо параметри не передано, він повертає порожній заморожений набір.

додати рядок java

Python




# Python program to demonstrate differences> # between normal and frozen set> # Same as {'a', 'b','c'}> normal_set>=> set>([>'a'>,>'b'>,>'c'>])> print>(>'Normal Set'>)> print>(normal_set)> # A frozen set> frozen_set>=> frozenset>([>'e'>,>'f'>,>'g'>])> print>(>' Frozen Set'>)> print>(frozen_set)> # Uncommenting below line would cause error as> # we are trying to add element to a frozen set> # frozen_set.add('h')>

>

>

Вихід:

Normal Set {'a', 'c', 'b'} Frozen Set {'e', 'g', 'f'}>

Часова складність: O(n)
Допоміжний простір: O(n)

Внутрішня робота Set

Це базується на структурі даних, відомій як хеш-таблиця. Якщо в одній позиції індексу присутні кілька значень, тоді значення додається до цієї позиції індексу, щоб сформувати зв’язаний список.

У Python Sets реалізовано за допомогою словника з фіктивними змінними, де ключові істоти є членами набору з більшою оптимізацією до часової складності.

Реалізація набору:

Набори в Python - внутрішня робота

Набори з численними операціями на одній HashTable:

Набори в Python - Хеш-таблиця

Методи для множин

Додавання елементів до наборів Python

Вставка в набір здійснюється через set.add( ), де створюється відповідне значення запису для зберігання в хеш-таблиці. Те саме, що перевірка елемента, тобто O(1) у середньому. Проте в гіршому випадку це може статися O(n) .

Python3




# A Python program to> # demonstrate adding elements> # in a set> # Creating a Set> people>=> {>'Jay'>,>'Idrish'>,>'Archi'>}> print>(>'People:'>, end>=> ' '>)> print>(people)> # This will add Daxit> # in the set> people.add(>'Daxit'>)> # Adding elements to the> # set using iterator> for> i>in> range>(>1>,>6>):> >people.add(i)> print>(>' Set after adding element:'>, end>=> ' '>)> print>(people)>

>

>

Вихід:

People: {'Idrish', 'Archi', 'Jay'} Set after adding element: {1, 2, 3, 4, 5, 'Idrish', 'Archi', 'Jay', 'Daxit'}>

Часова складність: O(n)
Допоміжний простір: O(n)

Операція об’єднання над наборами Python

Два набори можна об’єднати за допомогою функції union() або | оператор. Доступ до обох значень хеш-таблиці здійснюється за допомогою операції злиття, яка виконується над ними, щоб поєднати елементи, водночас дублікати видаляються. Часова складність цього O(len(s1) + len(s2)) де s1 і s2 — два набори, об’єднання яких необхідно виконати.

Python3




# Python Program to> # demonstrate union of> # two sets> people>=> {>'Jay'>,>'Idrish'>,>'Archil'>}> vampires>=> {>'Karan'>,>'Arjun'>}> dracula>=> {>'Deepanshu'>,>'Raju'>}> # Union using union()> # function> population>=> people.union(vampires)> print>(>'Union using union() function'>)> print>(population)> # Union using '|'> # operator> population>=> people|dracula> print>(>' Union using '|' operator'>)> print>(population)>

>

>

Вихід:

Union using union() function {'Karan', 'Idrish', 'Jay', 'Arjun', 'Archil'} Union using '|' operator {'Deepanshu', 'Idrish', 'Jay', 'Raju', 'Archil'}>

Часова складність: O(n)
Допоміжний простір: O(n)

Операція перетину над наборами Python

Це можна зробити за допомогою оператора intersection() або &. Загальні елементи вибрано. Вони схожі на ітерацію по хеш-списках і поєднання однакових значень в обох таблицях. Часова складність цього дорівнює O(min(len(s1), len(s2)), де s1 і s2 – два набори, об’єднання яких потрібно виконати.

Python3




# Python program to> # demonstrate intersection> # of two sets> set1>=> set>()> set2>=> set>()> for> i>in> range>(>5>):> >set1.add(i)> for> i>in> range>(>3>,>9>):> >set2.add(i)> # Intersection using> # intersection() function> set3>=> set1.intersection(set2)> print>(>'Intersection using intersection() function'>)> print>(set3)> # Intersection using> # '&' operator> set3>=> set1 & set2> print>(>' Intersection using '&' operator'>)> print>(set3)>

>

>

Вихід:

Intersection using intersection() function {3, 4} Intersection using '&' operator {3, 4}>

Часова складність: O(n)
Допоміжний простір: O(n)

Пошук відмінностей множин у Python

Знайти відмінності між наборами. Подібно до пошуку відмінностей у пов’язаному списку. Це робиться за допомогою оператора difference() або –. Часова складність знаходження різниці s1 – s2 становить O(len(s1))

Python3




# Python program to> # demonstrate difference> # of two sets> set1>=> set>()> set2>=> set>()> for> i>in> range>(>5>):> >set1.add(i)> for> i>in> range>(>3>,>9>):> >set2.add(i)> # Difference of two sets> # using difference() function> set3>=> set1.difference(set2)> print>(>' Difference of two sets using difference() function'>)> print>(set3)> # Difference of two sets> # using '-' operator> set3>=> set1>-> set2> print>(>' Difference of two sets using '-' operator'>)> print>(set3)>

>

>

Вихід:

Difference of two sets using difference() function {0, 1, 2} Difference of two sets using '-' operator {0, 1, 2}>

Часова складність: O(n)
Допоміжний простір: O(n)

Очищення наборів Python

Метод Set Clear() очищає весь набір на місці.

Python3




# Python program to> # demonstrate clearing> # of set> set1>=> {>1>,>2>,>3>,>4>,>5>,>6>}> print>(>'Initial set'>)> print>(set1)> # This method will remove> # all the elements of the set> set1.clear()> print>(>' Set after using clear() function'>)> print>(set1)>

>

>

Вихід:

Initial set {1, 2, 3, 4, 5, 6} Set after using clear() function set()>

Часова складність: O(n)
Допоміжний простір: O(n)

Однак у наборах Python є дві основні підводні камені:

  1. Набір не підтримує елементи в певному порядку.
  2. До набору Python можна додати лише екземпляри незмінних типів.

Часова складність множин

Операція Середній випадок Найгірший випадок примітки
x в s О(1) O(n)
Союз с|т O(len(s)+len(t))
Перехрестя с&т O(min(len(s), len(t)) O(довжина(s) * довжина(t)) замініть min на max, якщо t не є набором
Багаторазовий перетин s1&s2&..&sn (n-1)*O(l), де l є max(len(s1),..,len(sn))
Різниця с-т O(лише(и))

Оператори для множин

Набори та заморожені набори підтримують такі оператори:

Оператори Примітки
ключ у с перевірка збереження
ключ не в s перевірка на неутримання
s1 == s2 s1 еквівалентний s2
s1 != s2 s1 не еквівалентний s2
s1 <= s2 s1 є підмножиною s2
s1 s1 є належною підмножиною s2
s1>= s2 s1 є надмножиною s2
s1> s2 s1 є належним надмножиною s2
s1 | s2 об'єднання s1 і s2
s1 і s2 перетин s1 і s2
s1 – s2 набір елементів в s1, але не в s2
s1 ˆ s2 набір елементів в одному з s1 або s2

Останні статті про Python Set.