Tuple
Tuple eli monikko on listan tapainen tietorakenne. Sen olennaiset erot listaan ovat:
- Tuple merkitään kaarisuluilla
(
ja)
, lista merkitään hakasuluilla[
ja]
- Tuple on muuttumaton, kun taas listan sisältö voi muuttua
Esimerkiksi seuraava koodi luo tuplen, jossa on pisteen koordinaatit:
piste = (10, 20)
Tuplen sisällä oleviin alkioihin viitataan samalla tavalla kuin listassa:
piste = (10, 20)
print("x-koordinaatti:", piste[0])
print("y-koordinaatti:", piste[1])
x-koordinaatti: 10 y-koordinaatti: 20
Tuplen määrittelyn jälkeen sen arvoa ei kuitenkaan voi muuttaa, eli seuraava koodi ei toimi:
piste = (10, 20)
piste[0] = 15
TypeError: 'tuple' object does not support item assignment
Miksi tuple on olemassa?
Tuplen ideana on tallentaa jokin kiinteä kokoelma arvoja, jotka liittyvät toisiinsa. Esimerkiksi kun tallennamme pisteen, jossa on x- ja y-koordinaatti, tuple on luonteva valinta, koska pisteeseen kuuluu aina kaksi arvoa:
piste = (10, 20)
Voisimme sinänsä tallentaa pisteen myös listana:
piste = [10, 20]
Tämä ei kuitenkaan tuntuisi yhtä hyvältä ratkaisulta, koska lista sisältää peräkkäisiä alkioita jossakin järjestyksessä ja sen koko voi muuttua. Kun tallennamme pisteen, haluamme tallentaa nimenomaan x- ja y-koordinaatin eikä listaa koordinaateista.
Koska tuple on muuttumaton, sitä voidaan käyttää sanakirjan avaimena (toisin kuin listaa). Esimerkiksi seuraava ohjelma luo sanakirjan, jonka avaimet ovat pisteitä:
pisteet = {}
pisteet[(3, 5)] = "apina"
pisteet[(5, 0)] = "banaani"
pisteet[(1, 2)] = "cembalo"
print(pisteet[(3, 5)])
Vastaava koodi ei toimisi, jos käyttäisimme listoja:
pisteet = {}
pisteet[[3, 5]] = "apina"
pisteet[[5, 0]] = "banaani"
pisteet[[1, 2]] = "cembalo"
print(pisteet[[3, 5]])
TypeError: unhashable type: 'list'
Tuple ilman sulkuja
Tuplen määrittelyssä ei ole pakko antaa sulkuja. Esimerkiksi seuraavat koodit toimivat samalla tavalla:
luvut = (1, 2, 3)
luvut = 1, 2, 3
Tämän ansiosta voimme tehdä luontevasti funktion, joka palauttaa useita arvoja tuplena. Tarkastellaan seuraavaa esimerkkiä:
def minmax(lista):
return min(lista), max(lista)
lista = [33, 5, 21, 7, 88, 312, 5]
pienin, suurin = minmax(lista)
print(f"Pienin luku on {pienin} ja suurin on {suurin}")
Pienin luku on 5 ja suurin on 312
Tämä funktio palauttaa kaksi arvoa tuplena, ja funktion paluuarvo vastaanotetaan "yhtä aikaa" kahteen muuttujaan:
pienin, suurin = minmax(lista)
Tässä tapauksessa sijoitusoperaation vasemmalla puolella on tuple, jonka sisällä oleviin muuttujiin asetetaan funktion palauttaman tuplen sisältämät arvot:
(pienin, suurin) = minmax(lista)
Sanakirjojen yhteydessä esiteltiin items
-metodiin perustuvaa tapaa käydä läpi sanakirjan kaikki avaimet ja arvot:
sanakirja = {}
sanakirja["apina"] = "monkey"
sanakirja["banaani"] = "banana"
sanakirja["cembalo"] = "harpsichord"
for avain, arvo in sanakirja.items():
print("avain:", avain)
print("arvo:", arvo)
Tässäkin Python käyttää taustalla tupleja: sanakirja.items()
palauttaa yksi kerrallaan avain-arvo-parit tuplena, jonka ensimmäinen alkio on avain ja toinen arvo.
Vielä yksi tuplen käyttötarkoitus on kahden muuttujan arvon vaihtaminen keskenään:
luku1, luku2 = luku2, luku1
Yllä oleva koodi vaihtaa keskenään muuttujien luku1
ja luku2
arvot, eli koodi toimii samoin kuin seuraava, apumuuttujaa käyttävä koodi:
apu = luku1
luku1 = luku2
luku2 = apu
Log in to view the quiz
Vastaa lopuksi osion loppukyselyyn:
Log in to view the quiz