Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

12. Pythonin tietorakenteita

Samankaltaiset esitykset


Esitys aiheesta: "12. Pythonin tietorakenteita"— Esityksen transkriptio:

1 12. Pythonin tietorakenteita

2 Yleistä Tietorakenne (data structure) on järjestelmällinen esitysmuoto, joka mahdollistaa tietoalkioiden tehokkaan saannin ja muuttamisen. Eräs Pythonin vahvuus ovat useat kieleen sisäänrakennetut tietorakenteet. Esimerkiksi Javassa voi käyttää suoraan vain taulukoita. Tällä kurssilla käsitellään joitakin sekvenssejä (sequence) ja sanakirjaa (dictionary). Sekvenssi on peräkkäisten alkioiden kokoelma. Sekvenssit luokitellaan muuttumattomiksi (immutable) ja muuttuviksi (mutable) sen mukaan voidaanko sekvenssin alkioita muuttaa sekvenssin luomisen jälkeen.

3 Lukujono Lukujono (range) on kokonaislukujen äärellinen aritmeettinen jono. Peräkkäisen alkioiden väli d = ai+1 - ai on vakio, missä i = 0, 1, … Alkio ai = a0 + d ∙ (i - 1) Esimerkiksi jonossa 2, 4, 6, 8 väli d on 2. Muodostetaan kolmeparametrisella range-funktiolla. start: jonon ensimmäinen alkio a0. Nolla, jos määrittelemättä. stop: jonon viimeisen alkion päättelyyn käytettävä arvo. step: väli d. Jos d > 0, ai = a0 + d ∙ i, missä i ≥ 0 ja ai < stop. Jos d < 0, ai = a0 + d ∙ i, missä i ≥ 0 ja ai > stop. Lukujono on tyhjä, jos a0 ei täytä epäyhtälöä. Väli on yksi, jos se jätetään määrittelemättä. Väli ei voi olla nolla.

4 Lukujono Funktion peruskäyttötapaus on yksiparametrinen kutsu, jolloin jono alkaa nollasta ja koostuu peräkkäistä kokonaisluvuista parametriarvo pois lukien. Esimerkiksi range(5) tuottaa jonon 0, 1, 2, 3, 4. # 1, 2, 3, 4, 5 range(1, 6) # 2, 4, 6, 8 range(2, 9, 2) # 7, 20, 33, 46, 59, 72, 85, 98 range(7, 100, 13) # -3, -2, -1, 0, 1 range(-3, 2) # 5, 4, 3, 2, 1 range(5, 0, -1) # 1, -1, -3 range(1, -5, -2) # Tyhjä väli. range(1, 1) range(7, 3) # Ajonaikainen virhe ValueError range(1, 10, 0)

5 Lukujono Vaikka lukujono itsessään on muuttumaton sekvenssi, sitä käytetään harvoin pääasiallisena tietorakenteena. Lukujonoja käytetään tyypillisimmin silmukoinnin yhteydessä. Jonon alkiot voivat toimia laskurin tapaan ja jonolla voidaan tuottaa tietorakenteen alkioita yksilöiviä indeksiarvoja. Lukujono on näissä tehtävissä tehokas, koska se ei säilö alkioitaan, vaan laskee aina tarvittaessa uuden alkion arvon yhtälön avulla.

6 For-silmukka Pythonin for-silmukka on tehty sekvenssien tapaisten iteroitavien rakenteiden käsittelyyn. Silmukan otsikkorivillä esitellään muuttuja, johon sijoitetaan automaattisesti otsikkorivillä määritellyn sekvenssin seuraava alkio. Lippua tai laskuria ei voi käyttää ehdossa; ehto-lauseke annetaan aina avainsanaa in käyttäen. for muuttuja in sekvenssi: ... Toistettavat lauseet sidotaan rakenteeseen sisentämällä. Muista neljä välilyöntiä. Pysäytettävä break-lauseella, jos kaikkia alkioita ei haluta käsitellä. Continue aloittaa välittömästi seuraavan alkion käsittelevän kierroksen

7 Karkausvuodet1.py ja Karkausvuodet2.py
... vuosi = eka_vuosi while vuosi <= vika_vuosi: if ...: print(vuosi) vuosi = vuosi + 1 ... for vuosi in range(eka_vuosi, vika_vuosi + 1): if ...: print(vuosi)

8 Merkkijonot Muuttumattomia sekvenssejä, joista opitaan seuraavaksi erityisesti kuinka merkkijonosta voidaan valita yksittäisiä merkkejä ja osia []-notaatiolla ja indeksiarvoilla. Valinta ja merkkijonojen yhteydessä esitellyt funktiot toimivat myös lukujonojen ja myöhemmin esiteltävien sekvenssien yhteydessä. Python indeksoi sekvenssit nollasta alkavin kokonaisluvuin. Viimeinen indeksiarvo on n - 1, kun sekvenssissä on n kappaletta tietoalkioita. Sekvenssin pituus voidaan selvittää len-funktiolla. Myös negatiiviset (< 0) indeksiarvot ovat mahdollisia; Python lisää niihin automaattisesti sekvenssin pituuden.

9 Merkkijonot Indeksointia havainnollistaa oheinen taulukko, jossa on annettu merkkijonon "Python" merkkien indeksit. Ensimmäisen merkin indeksi on 0 tai -6, koska len("Python") + (-6) = = 0. Viimeisen merkin indeksi on 5 tai -1, koska len("Python") + (-1) = = 5. P y t h o n 1 2 3 4 5 -6 -5 -4 -3 -2 -1

10 Merkkijonot Sekvenssistä poimitaan yksittäinen alkio lisäämällä sekvenssin nimen perään hakasuljepari ja yksilöimällä alkio indeksiarvolla, joka sijoitetaan parametrin tapaan sulkeiden väliin. Virheellinen indeksiarvo aiheuttaa ajonaikaisen virheen IndexError. Merkkijonon merkkejä ei voi muuttaa. P y t h o n 1 2 3 4 5 -6 -5 -4 -3 -2 -1 merkit = "Python" # "P" print(print(merkit[0])) # vika = "n" vika = merkit[-1] print(vika) # Indeksiarvo 6: IndexError merkit[len(merkit)] # Indeksiarvo -7: IndexError merkit[-len(merkit) - 1] # TypeError: 'str' object does # not support item assignment merkit[0] = "T"

11 Merkkijonot Sekvenssistä poimitaan useampia tietoalkioita kerrallaan [::]-notaatiolla “viipaloimallaˮ (slicing). Valitut alkiot ovat peräkkäin tai seuraavat toisiaan tasavälein. Indeksiarvoja käytetään viipaloinnissa pitkälti range-funktion parametrien tapaan: [start:stop:step]. start: ensimmäisen viipaleeseen kuuluvan tietoalkion indeksi. Nolla, jos ei määritellä. Sekvenssin pituus n, jos suurempi kuin n ja nolla, jos pienempi kuin -n - 1. stop: ensimmäisen viipaleesta pois jäävän tietoalkion indeksi. N, jos ei määritellä tai suurempi kuin n. Nolla, jos pienempi kuin -n - 1. step: viipaleeseen valittavien tietoalkioiden väli. Yksi, jos määrittelemättä. Koko sekvenssin viipalointi kopioi sekvenssin.

12 Merkkijonot P y t h o n 1 2 3 4 5 -6 -5 -4 -3 -2 -1
merkit = "Python" # "tho" merkit[2:5] merkit[-4:-1] # "P" merkit[0:1] merkit[-6:-5] # Valitaan 3. merkkiin saakka: # "Pyt" merkit[:3] merkit[:-3] # Valitaan 4. merkistä alkaen: # "hon" merkit[3:] merkit[-3:] # Valitaan kaikki: "Python" merkit[:] P y t h o n 1 2 3 4 5 -6 -5 -4 -3 -2 -1 # Valitaan parillisissa # paikoissa olevat merkit: "Pto" merkit[::2] # Kääntäen: "nohtyP" merkit[::-1] # merkit kääntäen: "oht" merkit[4:1:-1] # Tyhjä merkkijono "". merkit[4:1] # Liian pieni tai suuri indeksi # ei kaada ohjelmaa, vaan niille # annetaan arvot 0 ja 6: "Python" merkit[-100:100]

13 Merkkijonot In-avainsanalla saadaan myös selville onko tietty alkio sekvenssissä. Toisin kuin useimmissa sekvensseissä, merkkijonoista voidaan hakea osia (osamerkki-jonoja). Min- ja max-funktiot palauttavat vastaavasti sekvenssin pienimmän ja suurimman alkion. merkit = "Python" # True ja False "P" in "Python" "P" not in "Python" # Pieni ja suuri kirjain ovat # eri merkit: False "p" in "Python" # True "on" in "Python" # Merkkijonon min-funktio # palauttaa pienimmän Unicode- # koodin omaavan merkin: "P" min("Python") # Merkkijonon max-funktio # palauttaa suurimman Unicode- # koodin omaavan merkin: "y" max("Python")


Lataa ppt "12. Pythonin tietorakenteita"

Samankaltaiset esitykset


Iklan oleh Google