Listat

Tähän mennessä olemme voineet tallettaa tietoa muuttujiin ainoastaan yksittäisinä lukuina, tekstipätkinä tai totuusarvioina, mutta usein olisi kätevää säilöä paljon tietoa yhteen paikkaan. Tätä varten on Pythonissa listoja.

Listan luominen

Pythonissa listat kirjoitetaan hakasulkeisiin, ja jokaista listan asiaan eli alkiota erottaa pilkku, esim. [1, 2, 3, 4] on lista, jossa on luvut 1, 2, 3, ja 4. Kuten minkä tahansa muunkin asian, listan voi tallentaa muuttujaan antamalla muuttujan nimen, jota seuraa yhtäsuuruusmerkki ja sen jälkeen lista. Tämän jälkeen muuttuja nimellä pääsee käsiksi listan tietoihin. Esimerkiksi lista = ["a", "b", "c"] luo muuttujaan lista listan, jossa on merkkijonot “a”, “b” ja “c”.

Tyhjän listän voi luoda niin, ettei listaan laita mitään alkioita eli tyhjäLista = [].

Esimerkkejä

koodi mitä tekee
lista = [] tallettaa muuttujaan lista, tyhjän listan.
a = [1, 2, 3] tallentaa muuttujaan a listan [1, 2, 3]

Listan arvojen käyttö

Kun luomme listan lista = [1, 2, 3, 4], miten voimme päästä käsiksi jälkikäteen listan tiettyyn alkioon? Se onnistuu komennolla lista[], jossa hakasulkeisiin kirjoitetaan monennenko alkion haluamme. Listan alkion jäjestysnumero eli indeksi on ensimmäisellä alkiolla 0, toisella alkiolla 1 ja niin edespäin. Viimeisen alkion indeksi on siis yhtä pienempi kuin listan pituus.

Esimerkiksi voisimme tallentaa listan kolmannen alkion muuttujaan kolmasAlkio komennolla kolmasAlkio = lista[2].

Jos listasta yritetään etsiä indeksillä jota listassa ei ole, tulee virheilmoitus ja ohjelma kaatuu. Listan isoin indeksi on aina listan pituutta yhtä pienempi ja listan pituuden saa komennossa len(). Komentoa käytetään laittamalla lista sulkuihin, esim. len([1, 2, 3]) antaa arvon 3, koska listan pituus on 3.

Esimerkkejä

koodi mitä tekee
lista[0] antaa listan ensimmäisen alkion
lista[2] antaa listan kolmannen alkion
eka = lista[0] tallentaa muuttujaan eka listan ensimmäisen alkion
len(lista) antaa listan pituuden
lista[len(lista)-1] antaa listan viimeisen alkion

Listan metodeja

Listoille on olemassa omia komentojaan, jotka toimivat vain listoille. Tällaisia komentoja kutsutaan metodeiksi. Tärkeimmät listojen metodit ovat append(), remove()ja sort(). Niitä käytetään kirjoittamalla listan nimi, sitten piste ja sitten metodin nimi, esim. lista.sort(), järjestää listan.

Append-komento lisää alkion listan perään. Lisättävä alkio kirjoitetaan komennon sulkujen sisään.

Remove-komento poistaa alkio listasta. Poistettava alkio kirjoitetaan komennon sulkuihin.

Sort-komento järjestelee lista. jos listassa on lukuja, ne menevät suuruusjärjestykseen. Jos listassa on tekstiä, ne menevät aakkosjärjestykseen.

Esimerkkejä

koodi mitä tekee
lista.append(1) lisää listaan loppuun luvun 1
lista.remove(“a”) poista listasta merkkijonon “a”
[“b”, “d”, “a”, “c”].sort() järjestää listan, eli palauttaa lista [“a”, “b”, “c”, “d”]

Listojen pikaluomisen komentoja

Tietynlaisten listojen luomisesta on haluttu tehdä helppoa. Listan jossa tietyt arvot toistuvat, voi luoda kertomalla listan. Esimerkiksi lista = [1]*4 luo listan [1, 1, 1, 1].

Toinen tapa luoda listoja nopeasti, on käyttää list(range())-komentoa. Sillä voi luoda listoja, joissa on tietyn kaavan mukaisesti lukuja. Rangelle voi antaa yhden luvun, jolloin syntyy lista, jossa on luvut nollasta yhtä annettua lukua pienempään lukuun. Jos listalle antaa sulkuihin kaksi lukua, saa listan jossa on luvut ensimmäisestä luvusta oista annettua lukua yhtä pienempään lukuun. Jos antaa kolme lukua, kolmas luku määrittää minkä kokoisia “askeleita” lukujen välillä on.

Esimerkkejä

koodi mitä tekee
[2]*3 luo listan [2, 2, 2]
[“a”, “b”]*2 luo listan [“a”, “b”, “a”, “b”]
range(5) luo lista [0, 1, 2, 3, 4]
range(2, 6) luo listan [2, 3, 4, 5]
list(range(0, 10, 2)) luo listan [0, 2, 4, 6, 8]

Tehtävät

Tee seuraavat tehtävät terminaaliin

  1. Tallenna muuttujaan tyhjä lista.

  2. Lisää listaan kolme hedelmää. Tulosta lista.

  3. Järjestä lista aakkosjärjestykseen. Tulosta se uudestaan.

  4. Tulosta terminaaliin vain listan toinen alkio.

  5. Poista listasta toinen alkio.

  6. Luo lista triplahedelmä, jossa toistuu hedelmälistasi kolmesti.

  7. Luo lista komennolla range, jossa on luvut 0…19

  8. Luo lista komennolla range, jossa on luvut 4…10

  9. Luo lista komennolla range, jossa on luvut 0, 3, 6, 9, 12

Tee seuraavat tehtävät omana ohjelmanaan tiedostoon

  1. Tee ohjelma, jossa luodaan lista, jossa on kolmen hahmon nimi. Ohjelman tulee tulostaa lista.

  2. Tee ohjelma, joka kysyy listaan lisättäviä asioita ja lisää käyttäjän syötteen listaan. Jokaisen lisäyksen jälkeen lista tulostetaan. (Vinkki: käytä while-silmukkaa)

For-silmukka

Tutustuimme edellisessä osassa while-silmukalla toteutettuun toistoon. For on toinen Pythonin toistorakenteista. Sille annetaan lista, jonka se käy läpi niin, että jokaisella toistokerralla käsitellään listan seuraava alkio.

For-komentoa käytetään seuraavasti:

for asia in lista:
    print(asia)

Toistorakenne aloitetaan komennolla for, jota seuraa väliaikainen muuttuja. Tällä muuttujalla voidaan toiston sisällä käyttää tämän toistokerran listan alkiota. Väliaikaismuuttujaa seuraa komento in, jota seuraa läpikäytävän listan nimi ja kaksoispiste. Tätä seuraa sisennettynä toistorakenteen sisältö, eli mitä toistetaan.

Yllä näytetyssä esimerkissä tulostetaan yksitellen kaikki listan alkiot.

Voimme myös tehdä silmukan sisällä eri asioita riippuen alkiosta ehtorakenteen avulla:

for hedelmä in hedelmät:
    if hedelmä == "omena":
        print("jee, omena!")

Tämä koodi tulostaa “jee, omena!”, jokaisella toistolla, jossa alkio listassa hedelmät on “omena”.

Listan alkioita ei ole myöskään pakko käyttää toiston sisällä. Siksi jos haluamme yksinkertaisesti toistaa jotain tietty määrä, se käy helposti luomalla haluttujen toistojen pituinen lista ja käymällä se läpi. Esimerkiksi jos haluamme tulostaa kymmenne kertaa “moi”, se käy helpoiten näin:

for asia in range(10):
    print("moi")

Huom! For-komennon kanssa riittä pelkkä range(), mutta voi käyttää myös aikaisemmin tuttua list(range())-komentoa.

Komennolla range(10) luodaan lista [0, …, 9], jossa on 10 alkiota. Siispä sen läpikäynti tuottaa 10 toistoa. Jokaisella toistolla tulostetaan “moi”.

Tehtävät

  1. Tee ohjelma, joka tulostaa luvut 1, 2, 3, …, 100.

  2. Tee ohjelma, joka tulostaa parilliset luvut 2, 4, 6, …, 100.

  3. Tee ohjelma, joka tulostaa 100 kertaa “hei!”

  4. Tee ohjelma, joka tulostaa 20 riviä, joissa lukee vuorotellen apina ja banaani.