Listat

Tavoitteet

Tavoitteena on opetella lista-tietorakenteen periaatteet ja perustoiminnot.

Toisena tavoitteena on soveltaa luovasti listoja erilaisissa pienissä ongelmissa.

Mikä on lista

Lista on tietorakenne, johon voidaan tallettaa nollasta "äärettömään" määrään alkioita.

Alkion tyyppi voi vaihdella jopa samassa listassa. Eli listassa voi olla toisaalta esimerkiksi merkkijonoja, kokonaislukuja ja liuku- eli desimaalilukuja. Myös muuntyyppisiä alkioita voidaan tallettaa listaan.

Listaan voidaan lisätä alkioita ja niitä voidaan poistaa. Listan tiettyyn alkioon voidaan viitata. Listalle on tehtävissä myös monia muita toimintoja.

Miten lista toimii

Listaa luotaessa siihen voidaan syöttää alkioita tai se luodaan tyhjänä.

Esimerkiksi voidaan luoda lista nimeltään maat ja syöttää samalla maat:

maat = ["Ruotsi", "Norja", "Islanti"]

Listaa käytetään mm. seuraavalla tavalla

  • Listan alkioon viitataan. Esimerkiksi listan ensimmäinen alkio voidaan tulostaa näyttöön seuraavasti:

print maat[0]

Huomaa, että listan ensimmäiseen alkioon viitataan luvulla 0.

  • Listan loppun lisätään alkio. Esimerkiksi lisätään listan loppuun merkkijono "Tanska":

maat.append("Tanska")

  • Listan tiettyyn kohtaan lisätään alkio. Esimerkiksi lisätään listan alkuun merkkijona "Suomi":

maat.insert(0,"Suomi")

  • Poistetaan tietty alkio. Esimerkiksi poistetaan merkkijono "Ruotsi":

maat.remove("Ruotsi")

  • Poistetaan listan viimeinen alkio ja tulostetaan se samalla näyttöön:

print maat.pop()

  • Toisinaan tarvitaan listan pituus. Tulostetaan listan maat pituus len-funktiolla näyttöön seuraavasti:

print len(maat)

  • Listan läpikäymiseen for-silmukka on oivallinen rakenne. Tulostetaan kaikki listan alkiot näyttöön:

for x in maat:

print x

Harjoituksia

Etene niin pitkälle kuin ehdit. Kysy rohkeasti apua!

Harjoitus 1

Kokoa edellisen opastuksen koodirivit yhdeksi koodiksi ja tutki miten koodi sitten toimii.

Harjoitus 2

Tutki miten toimii oheinen Trinket-koodi, joka tulostaa listasta satunnaisen värin.

  • Kiinnitä huomio myös koodin jakamiseen kahteen moduuliin

  • Kiinnitä huomio miten satunnaisluku arvotaan

Harjoitus 3

Kiinnitä kertauksen vuoksi huomiota koodin jakamiseen kahteen moduuliin. Yhdistä harjoituksen vuoksi nämä kaksi moduulia yhdeksi. Toisin sanoen kopioi funktiot.py -moduulissa oleva funktion koodi ja sijoita se main.py -moduuliin.

Poista sitten tarpeettomana funktiot.py -moduuli.

Poista myös main.py -moduulista tarpeeton from funktiot import * -lause.

Harjoitus 4

Laadi kaksi listaa:

vokaalit ["a", "e", "i", "o", "u", "y", "ä", "ö"]

konsonantit ["h", "j", "k", "l", "m", "n", "p", "r", "s", "t", "v"]

tulosta kummastakin listasta jokin satunnainen kirjain

Harjoitus 5

Laadi sitten funktio annaVokaali(), joka palauttaa satunnaisen vokaalin.

Kokeile ajamalla ohjelma useita kertoja ja tulostamalla kysytty vokaali näyttöön komennolla print annaVokaali().

Harjoitus 6

Tee vastaava toimenpide konsonanteille.

Tulosta sitten nelikirjaimisia sanoja seuraavasti:

print annaKonsonantti(()+annaVokaali()+annaKonsonantti(()+annaVokaali()

Aja ohjelma useita kertoja. Kuinka usein saat jonkin järkevän sanan?

Harjoitus 7

Tutki, kuinka suuri osa arvottavista sanoista on merkityksellisiä. Toteuta se siten, että teet ensin sata nelikirjaimista sanaa, jotka talletat listaan.

Tulosta sitten lista näyttöön esimerkiksi kymmenen kertaa kymmenen sanan taulukkona. Käy lista läpi ja laske, kuinka monta järkevää sanaa tuli. Vertaile tuloksia useiden eri ajokertojen kesken ja muiden ryhmässä olevien kanssa.