Python 3/Joukko
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ä
muokkaaJoukon 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
muokkaaUseimmista joukko-operaatiosta on kaksi versiota: operaattorit ja metodi.
Tavallisimpia operaatioita:
Joukkojen yhdiste
muokkaajoukko1 | 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
muokkaajoukko1 & 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
muokkaajoukko1 - 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
muokkaaOsajoukko (subset)
muokkaajoukko1 <= 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)
muokkaajoukko1 > 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
muokkaaPythonissa 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- Python-kielisen_ohjelmoinnin_perusteet (Wikiopiston opintopiirin opiskeluohjeita)
Johdanto: | |
---|---|
Tietotyypit ja tietorakenteet: |
Luvut - Merkkijonot - Lista - Monikko (tuple) - Sanakirja - Joukko (set) |
Ohjausrakenteet | |
Muut kielen rakenteet: |
Moduuli - Luokka - Funktio - Virheidenhallinta - Tiedosto |
Graafinen käyttöliittymä: | |
Harjoitustehtäviä: | |
Lisätiedot ja lähteet: |