Joukko eli set on järjestämätön tietorakenne, jossa kukin alkio voi esiintyä vain kerran (Set theory eli joukko-oppi).

Joukon alkiot voivat olla mitä tahansa vertailtavissa olevia vakioarvoja (hashable), kuten numeroita, merkkijonoja tai olioita.

Joukko luodaan sisäänrakennetulla funktiolla set mistä tahansa iteroitavissa olevasta tietorakenteesta (iterable), kuten listasta tai toisesta joukosta.

>>> joukko1 = set([1, 2, 3, 4])

Joukon luomiseen voi käyttä myös kaarisuljesyntaksia.

>>> joukko2 = {3, 4, 5, 6}

Tyhjän joukon luomiseen pitää käytää set-operaattoria:

>>> joukko3 = set()

Yleistä

muokkaa

Joukon alkioiden määrän saa selville len-funktiolla:

>>> len(joukko1)
4

Alkion voi lisätä add-metodilla:

>>> joukko1.add(9)
>>> joukko1
{1, 2, 3, 4, 9}

Alkion voi poistaa remove-metodilla:

>>> joukko1.remove(9)
>>> joukko1
{1, 2, 3, 4}

Joukon jäsenyyttä voi testata in-operaattorilla:

>>> 3 in joukko1
True
>>> 8 in joukko1
False
>>> 8 not in joukko1
True

Joukko-operaattorit ja -metodit

muokkaa

Useimmista joukko-operaatiosta on kaksi versiota: operaattorit ja metodi.

Tavallisimpia operaatioita:

Joukkojen yhdiste

muokkaa

joukko1 | joukko2
joukko1.union(joukko2, ...)

Palauttaa uuden joukon, jossa on kaikki alkiot annetuista joukoista.

>>> ohjelmointikerho = {'Yrkki', 'Kaisa', 'Aapo', 'Eki'}
>>> shakkikerho = {'Pia', 'Late', 'Yrkki', 'Bertta'}
>>> ohjelmointikerho | shakkikerho
{'Pia', 'Aapo', 'Late', 'Eki', 'Bertta', 'Yrkki', 'Kaisa'}

Joukkojen leikkaus

muokkaa

joukko1 & joukko2
joukko1.intersection(joukko2, ...)

Palauttaa joukon, jossa on annettujen joukkojen yhteiset alkiot.

>>> ohjelmointikerho = {'Yrkki', 'Kaisa', 'Aapo', 'Eki'}
>>> shakkikerho = {'Pia', 'Late', 'Yrkki', 'Bertta'}
>>> ohjelmointikerho & shakkikerho
{'Yrkki'}

Joukkojen erotus

muokkaa

joukko1 - joukko2
joukko1.difference(joukko2, ...)

Palauttaa joukon, jossa on ensimmäisen joukon alkiot paitsi ne, jotka ovat jossakin muussa annetussa joukossa.

>>> ohjelmointikerho = {'Yrkki', 'Kaisa', 'Aapo', 'Eki'}
>>> shakkikerho = {'Pia', 'Late', 'Yrkki', 'Bertta'}
>>> ohjelmointikerho - shakkikerho
{'Eki', 'Aapo', 'Kaisa'}

Vertailu

muokkaa

Osajoukko (subset)

muokkaa

joukko1 <= joukko2
joukko1.issubset(joukko2, ...)

Palauttaa True, jos joukko 1 sisältyy joukkoon 2.

>>> joukko1 = {1, 2}
>>> joukko2 = {1, 2, 3, 4}
>>> joukko1 <= joukko2
True

Ylijoukko (superset)

muokkaa

joukko1 > joukko2
joukko1.issuperset(joukko2, ...)

Palauttaa True, jos joukko 1 sisältää joukkon 2.

>>> joukko1 = {1, 2, 3, 4}
>>> joukko2 = {3, 4}
>>> joukko1 > joukko2
True

Muuttamaton joukko frozenset

muokkaa

Pythonissa on myös toinen joukkotyyppi frozenset, joka on muuten samanlainen kuin set, mutta sitä ei voi muokata luomisen jälkeen. Toisin kuin set, frozenset on ns. hashable, joten sitä voi mm. käyttää avaimena dictionaryssä sekä alkiona toisessa joukossa.

>>> joukkoA = frozenset([1, 2, 3, 4])
>>> joukkoB = frozenset([3, 4, 5, 6])
>>> joukkojenjoukko = set([joukkoA, joukkoB])
>>> joukkojenjoukko
{frozenset({1, 2, 3, 4}), frozenset({3, 4, 5, 6})}

Aiheesta muualla

muokkaa