Siirry sisältöön

Python 3/Joukko

Wikikirjastosta

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()

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 | muokkaa wikitekstiä]

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

Tavallisimpia operaatioita:

Joukkojen yhdiste

[muokkaa | muokkaa wikitekstiä]

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 | muokkaa wikitekstiä]

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 | muokkaa wikitekstiä]

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'}

Osajoukko (subset)

[muokkaa | muokkaa wikitekstiä]

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 | muokkaa wikitekstiä]

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 | muokkaa wikitekstiä]

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 | muokkaa wikitekstiä]