11 Lisalugemine: Hulk

Veel üks Pythoni andmestruktuur, kuhu saab mitmeid elemente paigutada, on hulk (ingl set). Hulga tähistamiseks kasutatakse loogelisi sulgusid { ja }.

Teise andmestruktuuri (nt järjendi või enniku) põhjal saab hulga teha funktsiooniga set.

h1 = {8, 2, 3, 6, 7}
h2 = set([6, 4, 5])
h3 = set('Tere hommikust')

Tühja hulga loomiseks tuleb kasutada set(), sest tühjad loogelised sulud {} tähistavad hoopis tühja sõnastikku.

Hulk ei ole järjestatud

Nagu matemaatilises hulgaski, pole Pythoni hulgas elementide järjekord oluline. Nii võib ka Python hulga elemendid teises järjekorras esitada, kui need sisestatud on.

>>> {8, 6, 4}
{8, 4, 6}

See tähendab ka muuhulgas, et kaks hulka on võrdsed siis, kui nad sisaldavad samu elemente. Need ei pea olema samas järjekorras (tegelikult polegi hulga elementidel järjekorda).

>>> {42, 11} == {11, 42}
True

Kuna elementide järjekord pole määratud, siis ei saa ka üksikut elementi indeksi abil kätte. Küll aga saame for-tsükli abil hulga kõigi elementidega midagi ette võtta, hoolimata sellest, “mitmendat” elementi hetkel käsitleme:

for el in h3:
    print(el)

Enesekontroll (1 ülesanne)

Hulgas ei ole korduvaid elemente

Teine oluline hulga tunnus pärineb samuti matemaatilistelt hulkadelt: hulgas ei ole korduvaid elemente. Kui püüame elemente hulga sees korrata, siis arvestatakse neid ikkagi ühekordselt.

>>> {4, 6, 7, 4}
{4, 6, 7}

Enesekontroll (1 ülesanne)


Hulgad on muudetavad

Hulgad on muteeritavad: neid saab muuta elemente lisades ja eemaldades. Kui järjendi puhul oli elemendi juurde lisamiseks käsk append, mis tähendab lõppu lisamist, siis hulgal pole “lõppu” olemas ning lisamise käsu nimeks on add. See lisatakse sarnaselt append-ile hulga lõppu punktiga:

>>> h = {42, 11}
>>> h.add(10)
>>> h
{10, 42, 11}

Veel mõned hulkade peal töötavad käsud on toodud järgmises tabelis:

Käsk Selgitus
h.remove(el) eemaldab elemendi el hulgast h
h.update(h1) täiendab hulka h teise hulga h1 elementidega
h.pop() eemaldab ja tagastab hulgast h (juhusliku) elemendi
h.clear() tühjendab hulga h
h.copy() tagastab hulga h koopia

Näiteks vaatame, kuidas remove elemendi eemaldab:

>>> h = {1, 5, 7, 3}
>>> h.remove(5)
>>> h
{1, 3, 7}

Proovi käske ka ise!

Hulga suurus

Hulga suuruse saab leida sarnaselt järjendite ja ennikutega funktsiooniga len. Samuti saab hulgas sisalduvust kontrollida analoogselt:

>>> h = {42, 11}
>>> len(h)
2
>>> 42 in h
True

Veel operatsioone hulkadega

Paljud funktsioonid nagu min ja max töötavad hulkadega samamoodi nagu järjendite või ennikutega.

Hulkadega saab ka selliseid operatsioone teha, mida järjendite või ennikutega ei saa. Tähtsaimad neist on toodud järgnevas tabelis. Kõik need operatsioonid on binaarsed (kahekohalised) ja vastava operatsiooni märk tuleb panna kahe hulga vahele.

Operatsioon Selgitus
& ühisosa ehk hulk elementidest, mida sisaldavad mõlemad hulgad
| ühend ehk hulk elementidest, mida sisaldavad üks või teine või mõlemad hulgad
- vahe ehk hulk elementidest, mida sisaldab esimene, aga ei sisalda teine hulk
^ sümmeetriline vahe ehk hulk elementidest, mida sisaldavad üks või teine hulk, aga mitte mõlemad
< on range alamhulk ehk kas esimene hulk on saadud teisest elemente eemaldades
> on range ülemhulk ehk kas teine hulk on saadud esimesest elemente eemaldades
<= on mitterange alamhulk ehk kas esimene hulk on saadud teisest elemente eemaldades või sellega võrdne
>= on mitterange ülemhulk ehk kas teine hulk on saadud esimesest elemente eemaldades või sellega võrdne

Proovi järgi, kuidas need operatsioonid töötavad!

Enesekontroll (3 ülesannet)

Litsents

Icon for the Creative Commons Attribution 4.0 International License

Tarkvaraarendus. 2. trükk on loodud Eno Tõnisson, Tauno Palts, Kaarel Tõnisson, Heidi Meier, Merilin Säde, Ago Luberg, Birgy Lorenz, Einar Kivisalu, Meelis Antoi, ja Säde Mai Krusberg poolt Creative Commons Attribution 4.0 International License litsentsi alusel, kui pole teisiti märgitud.

Jaga seda raamatut