Python pruža ugrađeni tip podataka, set, koji rukuje skupovima.
Skup tipova je zbirka nedupliciranih elemenata (elementi koji nisu iste vrijednosti, jedinstveni elementi) i može izvoditi operacije skupa kao što su skup ujedinjenja, skup proizvoda i skup razlika.
U ovom odjeljku, osnovne operacije u skupnim operacijama tipa skupa objašnjene su s uzorkom koda.
- Izrada postavljenih objekata:
{}
,set()
- skup inkluzije notacije
- Broj elemenata u skupu:
len()
- Dodavanje elementa skupu:
add()
- Uklonite element iz skupa:
discard()
,remove()
,pop()
,clear()
- Wasset (spajanje, unija):|operater,
union()
- Setovi proizvoda (zajednički dijelovi, raskrižja, raskrižja):& operater,
intersection()
- relativna dopuna:-operater,
difference()
- skup razlika simetrije:^ operator,
symmetric_difference()
- podskup ili ne:<= operator,
issubset()
- Gornji set ili ne:>= operator,
issuperset()
- Određivanje jesu li međusobno prosti ili ne:
isdisjoint()
Vrsta skupa je promjenjivi tip koji može dodavati i brisati elemente, a postoji i tip zamrznutog skupa koji ima istu operaciju skupa i druge metode kao tip skupa, ali je nepromjenjiv (ne može se mijenjati dodavanjem, brisanjem ili na drugi način mijenjanjem elemenata ).
- Izrada objekta skupa::{},set()
- skup inkluzije notacije
- Broj elemenata u skupu:len()
- Dodavanje elementa skupu:add()
- Uklonite element iz skupa:discard(),remove(),pop(),clear()
- Wasset (spajanje, unija):|operater,union()
- Setovi proizvoda (zajednički dijelovi, raskrižja, raskrižja):& operater,intersection()
- relativna dopuna:-operater,difference()
- skup razlika simetrije:^ operator,symmetric_difference()
- podskup ili ne:<= operator,issubset()
- Gornji set ili ne:>= operator,issuperset()
- Određivanje jesu li međusobno prosti ili ne:isdisjoint()
Izrada objekta skupa::{},set()
Generirano valnim zagradama {}
Objekti skupa tipova mogu se stvoriti zatvaranjem elemenata u zagrade {}.
Ako postoje duplicirane vrijednosti, one se zanemaruju i samo jedinstvene vrijednosti ostaju kao elementi.
s = {1, 2, 2, 3, 1, 4}
print(s)
print(type(s))
# {1, 2, 3, 4}
# <class 'set'>
Moguće je imati različite vrste kao elemente. Međutim, objekti koji se mogu ažurirati kao što su vrste popisa ne mogu se registrirati. Korke su dopuštene.
Također, budući da tipovi skupova nisu poredani, redoslijed kojim su generirani se ne pohranjuje.
s = {1.23, 'abc', (0, 1, 2), 'abc'}
print(s)
# {(0, 1, 2), 1.23, 'abc'}
# s = {[0, 1, 2]}
# TypeError: unhashable type: 'list'
Različiti tipovi, kao što su int i float, smatraju se duplikatima ako su im vrijednosti ekvivalentne.
s = {100, 100.0}
print(s)
# {100}
Budući da se prazna zagrada {} smatra tipom rječnika, objekt tipa praznog skupa (prazan skup) može se kreirati korištenjem sljedećeg konstruktora.
s = {}
print(s)
print(type(s))
# {}
# <class 'dict'>
Generirano od strane konstruktora set()
Objekti skupa tipa također se mogu kreirati pomoću konstruktora set().
Navođenje iterativnog objekta kao što je popis ili tuple kao argument generira skup objekt čiji su elementi samo jedinstvene vrijednosti, s isključenim dupliciranim elementima.
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'>
Nepromjenjivi frozenset tipovi se kreiraju pomoću konstruktora frozenset().
fs_l = frozenset(l)
print(fs_l)
print(type(fs_l))
# frozenset({1, 2, 3, 4})
# <class 'frozenset'>
Ako je argument izostavljen, kreira se prazan objekt tipa skupa (prazan skup).
s = set()
print(s)
print(type(s))
# set()
# <class 'set'>
Duplicirani elementi mogu se ukloniti s popisa ili tuple pomoću set(), ali redoslijed izvornog popisa nije sačuvan.
Za pretvaranje vrste skupa u popis ili torku, koristite list(),tuple().
l = [2, 2, 3, 1, 3, 4]
l_unique = list(set(l))
print(l_unique)
# [1, 2, 3, 4]
Pogledajte sljedeći članak za informacije o uklanjanju duplikata elemenata uz očuvanje redoslijeda, izdvajanju samo duplikata elemenata i obradi duplikata elemenata u dvodimenzionalnom nizu (popis popisa).
skup inkluzije notacije
Osim razumijevanja popisa, postoje i postavljena razumijevanja. Jednostavno zamijenite uglaste zagrade [] zagradama {} u shvaćanjima popisa.
s = {i**2 for i in range(5)}
print(s)
# {0, 1, 4, 9, 16}
Pogledajte sljedeći članak za više informacija o zapisu za razumijevanje popisa.
Broj elemenata u skupu:len()
Broj elemenata u skupu može se dobiti pomoću ugrađene funkcije len().
s = {1, 2, 2, 3, 1, 4}
print(s)
print(len(s))
# {1, 2, 3, 4}
# 4
Ako želite prebrojati broj elemenata na svakom popisu koji ima elemente s dupliciranim vrijednostima itd., pogledajte sljedeći članak.
Dodavanje elementa skupu:add()
Da biste dodali element skupu, koristite metodu add().
s = {0, 1, 2}
s.add(3)
print(s)
# {0, 1, 2, 3}
Uklonite element iz skupa:discard(),remove(),pop(),clear()
Da biste uklonili element iz skupa, koristite metode discard(), remove(), pop() i clear().
Metoda discard() briše element naveden u argumentu. Ako je navedena vrijednost koja ne postoji u skupu, ništa se ne radi.
s = {0, 1, 2}
s.discard(1)
print(s)
# {0, 2}
s = {0, 1, 2}
s.discard(10)
print(s)
# {0, 1, 2}
Metoda remove() također uklanja element naveden u argumentu, ali se vraća pogreška KeyError ako je navedena vrijednost koja ne postoji u skupu.
s = {0, 1, 2}
s.remove(1)
print(s)
# {0, 2}
# s = {0, 1, 2}
# s.remove(10)
# KeyError: 10
Metoda pop() uklanja elemente iz skupa i vraća njihove vrijednosti. Nije moguće odabrati koje vrijednosti želite ukloniti. Prazan skup će rezultirati pogreškom 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'
Metoda clear() uklanja sve elemente i čini skup praznim.
s = {0, 1, 2}
s.clear()
print(s)
# set()
Wasset (spajanje, unija):|operater,union()
Skup sindikata (spajanje, unija) može se dobiti pomoću | operator ili metoda 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}
Za metodu se može navesti više argumenata. Osim tipa skupa, kao argumenti se mogu navesti i popisi i torke koje se set() mogu pretvoriti u tip skupa. Isto vrijedi i za sljedeće operatore i metode.
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}
Setovi proizvoda (zajednički dijelovi, raskrižja, raskrižja):& operater,intersection()
Skup proizvoda (zajednički dio, raskrižje i raskrižje) može se dobiti pomoću & operator ili metoda 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}
relativna dopuna:-operater,difference()
Skup razlika može se dobiti pomoću – operatora ili metode razlike().
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}
skup razlika simetrije:^ operator,symmetric_difference()
Skup simetričnih razlika (skup elemenata sadržanih u samo jednom od dva) može se dobiti pomoću ^ operatora ili symmetric_difference().
Ekvivalentno isključivoj disjunciji (XOR) u logičkim operacijama.
s_symmetric_difference = s1 ^ s2
print(s_symmetric_difference)
# {0, 3}
s_symmetric_difference = s1.symmetric_difference(s2)
print(s_symmetric_difference)
# {0, 3}
podskup ili ne:<= operator,issubset()
Da biste utvrdili je li skup podskup drugog skupa, koristite operator <= ili metodu issubset().
s1 = {0, 1}
s2 = {0, 1, 2, 3}
print(s1 <= s2)
# True
print(s1.issubset(s2))
# True
I operator <= i metoda issubset() vraćaju true za ekvivalentne skupove.
Da biste utvrdili je li to istinit podskup, upotrijebite operator <=, koji vraća lažno za ekvivalentne skupove.
print(s1 <= s1)
# True
print(s1.issubset(s1))
# True
print(s1 < s1)
# False
Gornji set ili ne:>= operator,issuperset()
Da biste utvrdili je li jedan skup nadskup drugog, koristite operator >= ili issuperset().
s1 = {0, 1}
s2 = {0, 1, 2, 3}
print(s2 >= s1)
# True
print(s2.issuperset(s1))
# True
I operator >= i metoda issuperset() vraćaju true za ekvivalentne skupove.
Da biste utvrdili je li to pravi nadskup, upotrijebite operator >=, koji vraća lažno za ekvivalentne skupove.
print(s1 >= s1)
# True
print(s1.issuperset(s1))
# True
print(s1 > s1)
# False
Određivanje jesu li međusobno prosti ili ne:isdisjoint()
Da biste utvrdili jesu li dva skupa prosti jedan prema drugom, koristite metodu isdisjoint().
s1 = {0, 1}
s2 = {1, 2}
s3 = {2, 3}
print(s1.isdisjoint(s2))
# False
print(s1.isdisjoint(s3))
# True