12. Pythonin tietorakenteita

Slides:



Advertisements
Samankaltaiset esitykset
18. Abstraktit tietotyypit
Advertisements

15. Loogiset operaatiot.
@ Leena Lahtinen Helia Ohjelman perusrakenteet 1. PERÄKKÄISRAKENNE 2. VALINTARAKENNE 3. TOISTORAKENNE.
Olio-ohjelmoinnin perusteet luento 3: Muuttujista ja funktioista Sami Jantunen LTY/Tietotekniikan osasto.
JavaScript (c) Irja & Reino Aarinen, 2007
Ohjelman perusrakenteet
2.8.3 Abstraktit tietotyypit
Taulukoiden määrittely, käsittely ja kopiointi Vaihtoehdot taulukoille
22. Taulukot.
Rakenteinen ohjelmointi
Näytölle tulostaminen. 7.2 Sisällys System.out.println - ja System.out.print -operaatiot. Tulostus erikoismerkeillä. Edistyneempää tulosteiden.
AS Automaation signaalinkäsittelymenetelmät
Java-ohjelmointi Opas ammattimaiseen osaamiseen Luku 4 Toistolauseet
Ehto- ja toistolauseet
Ohjelmoinnin tekniikkaa Sisällys for -lause lyhemmin. Vaihtoehtoisia merkintöjä aritmeettisille lauseille. Useiden muuttujien esittely.
TAULUKKO YKSIULOTTEINEN TAULUKKO. TAULUKKO  Taulukon tarkoitus Ohjelmassa tarvitaan paljon samantyyppisiä samaan kohdealueeseen kuuluvia muuttujia Näitä.
2. Vuokaaviot.
13. Hyvä ohjelmointitapa (osa 1)
1 Kertaus koetta varten oleellisista asioista Jukka Juslin.
ict1td002 - Copyright Raine Kauppinen 1 Alkuarvot ja tyyppimuunnokset (1/5)  Aiemmin olemme jo antaneet muuttujille alkuarvoja, esimerkiksi: int.
11. Javan toistorakenteet
Tietotyypit Tietotyyppi määrittää muuttujan sisältämän datan luonnetta, muistista tarvittavaa tilaa ja sitä, millaisia operaatioita siihen voidaan kohdistaa.
20. Javan omat luokat.
SQL Standardoitu kieli, jonka avulla voidaan
4. Attribuutit 4.1. Sisällys Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2.
Hyvä ohjelmointitapa (osa 2) Yleistä Lisää hyviä ohjelmointikäytäntöjä: − Jaa pitkä koodi osiin. − Käytä attribuutteja säästeliäästi.
22. Taulukot.
1 Ohjelmointikielten varhaishistoria Esa-Matti Miettinen
Johdatus ohjelmointiin – C kielen peruselementit Tutkijayliopettaja Manne Hannula Opetusharjoittelu (ohjaava opettaja Jukka Jauhiainen)
FunktiottMyn1 Funktiot Funktiot voidaan jakaa –Kirjastofunktioihin, jotka ovat valmiina kaikkien käytössä. Erikoisempien kirjastofunktioiden käyttöönotto.
Antti-Jussi Lakanen Nuorten peliohjelmointi 2009 / Jyväskylän yliopisto.
Kontrollirakenteet laajemmin
Javascript 2: Ohjelmointikielen ominaisuudet Jaana Holvikivi Metropolia.
14. Poikkeukset Sisällys Johdanto poikkeuksiin. Poikkeusten käsittely: − Poikkeusten käsittely paikallisesti. − Poikkeusten heittäminen. Exception.
15. Ohjelmoinnin tekniikkaa
2. Lukujonot -äärellinen tai ääretön 2.1. Lukujonon käsiteLuettelona: a 1, a 2, a 3,…,a n,…, jolloin a n on jonon n:s termi Lukujonon merkintätapoja Jono.
For-toistolausetMyn1 for-toistolause for-lauseen rakenne on: for(aloituslauseke; lauseke; lopetuslauseke) lause; Puolipisteiden on oltava aina paikoillaan,
Ohjausrakenteet Määräävät ohjelmakoodin suoritusjärjestyksen Ehtolause if – else on muotoa if (lauseke) lause1 else lause2 Jos lauseke on tosi, niin suoritetaan.
Ohjausjärjestelmien jatkokurssi
Toistorakenne Toistorakennetta käytetään ohjelmissa sellaisissa tilanteissa, joissa jotain tiettyä ohjelmassa tapahtuvaa toimenpidekokonaisuutta halutaan.
Scalan valmiit kokoelmat. Mikä on kokoelma?  Tietorakenne jonka tehtävänä on pitää kirjaa (useista) tietyn tyyppisistä arvoista. Kokoelman sisältämiä.
Toistorakenne Toistorakennetta käytetään ohjelmissa sellaisissa tilanteissa, joissa jotain tiettyä ohjelmassa tapahtuvaa toimenpidekokonaisuutta halutaan.
3. Muuttujat ja operaatiot
1. Omat operaatiot.
2. Taulukot.
17. Javan omat luokat.
Scala Collections.
7. Hyvä ohjelmointitapa..
13. Loogiset operaatiot.
for-toistolause for-lauseen rakenne on:
Millaisia kokoelmia Scala tarjoaa
Lausekielinen ohjelmointi II Ensimmäinen harjoitustyö
Toisto Toistolausekkeet for, while(ehto){…} ja do {…} while(ehto)
2. Lukujonot 2.1. Lukujonon käsite -äärellinen tai ääretön Luettelona:
10. Javan ohjausrakenteet
16. Ohjelmoinnin tekniikkaa
14. Hyvä ohjelmointitapa.
11. Javan valintarakenteet
2. Taulukot.
12. Javan toistorakenteet
7. Hyvä ohjelmointitapa..
7. Näytölle tulostaminen
Kontrollirakenteet laajemmin
13. Loogiset operaatiot.
Ohjelman perusrakenteet
12. Javan toistorakenteet
3. Attribuutit.
4. Luokan testaus ja käyttö olion kautta
1. Olio-ohjelmointi.
16. Ohjelmoinnin tekniikkaa
Esityksen transkriptio:

12. Pythonin tietorakenteita

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.

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.

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)

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.

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

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)

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.

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

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"

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.

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] # 2.-4. 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]

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