Listojen avulla ohjelma voi käsitellä kätevästi suurta määrää tietoa.
Esimerkiksi jos ohjelman muistissa ovat sadan käyttäjän nimet, niiden
tallentaminen erillisiin muuttujiin
nimi1,
nimi2,
nimi3, ...,
nimi100 olisi hankalaa. Kun nimet ovat listassa, kaikkiin nimiin voi viitata helposti yhden muuttujan
nimet kautta.
Listojen merkittävä etu on, että ohjelman rakenne pysyy samana,
vaikka tiedon määrä olisi vaihteleva. Esimerkiksi nimien käsittelyssä
samanlainen ohjelma kelpaa tilanteissa, joissa nimiä on viisi, sata ja
miljoona. Lisäksi vaikka tiedon määrä olisi pieni, listat voivat
selventää ohjelman rakennetta.
Lista on yleisin Python-kielen valmiista tietorakenteista ja soveltuu
moniin ohjelmointitehtäviin. Lisää esimerkkejä listan sovelluksista
tulee vastaan opassarjan myöhemmissä osissa.
Lista
Lista on muuttuja, joka sisältää
kokoelman alkioita tietyssä järjestyksessä. Listassa olevat alkiot
voivat olla esimerkiksi lukuja tai merkkijonoja.
Seuraavassa ohjelmassa on lista
nimet, joka sisältää
nimet Henrikki, Uolevi ja Antti. Ohjelma tulostaa ensin nimet yksi
kerrallaan ja sitten uudestaan koko listan. Tämän jälkeen ohjelma
muuttaa Uolevin nimeksi Einari ja tulostaa vielä koko listan.
Ohjelman tulostus on seuraava:
Ensin tulee Markus
Sitten on Mikael
Viimeisenä on Elisa
Tässä vielä koko joukko:
['Markus', 'Mikael', 'Elisa']
Toinen onkin Einari
Tässä vielä koko joukko:
['Markus', 'Einari', 'Elisa']
Listan luonnissa alkiot merkitään hakasulkujen sisään pilkuilla
erotettuina. Tämän jälkeen alkioihin voi viitata kokonaisluvuin nollasta
alkaen: tässä
nimet[0] on ensimmäinen nimi,
nimet[1] on toinen nimi ja
nimet[2] on kolmas nimi. Listan koko sisällön voi tulostaa antamalla pelkän listan nimen
print-komennolle.
Esimerkki: Kuukaudet
Yksi
listan käyttötarkoitus on, että se toimii ohjelman tietovarastona.
Seuraavassa ohjelmassa lista sisältää kuukausien nimet suomeksi, jolloin
ohjelman on helppoa nimetä käyttäjän antama kuukausi.
Ohjelman tulostus voi olla seuraava:
Anna kuukausi (1-12): 9
Kuukauden nimi: syyskuu
Ohjelman toiminta perustuu siihen, että listan alkioon voi viitata
muuttujan avulla. Listassa kuukausien numerointi alkaa nollasta, minkä
vuoksi ohjelma pienentää yhdellä käyttäjän antamaa numeroa. Esimerkiksi
jos käyttäjä antaa numeron 9, ohjelma hakee kuukauden nimen kohdasta
lista[8].
Listassa oleminen
Totuusarvo
alkio in lista on tosi, jos alkio on listassa. Vastaavasti totuusarvo
alkio not in lista on tosi, jos alkio ei ole listassa. Seuraava ohjelma tulostaa eri viestin listassa oleville käyttäjille.
Tässä on ohjelman mahdollisia tulostuksia:
Anna nimi: Markus
Mitä uutta, kuoma?
Anna nimi: Sakke
Et kuulu sisäpiiriin!
Jos nimi on Markus, Mikko tai Aino, ohjelma tulostaa viestin
"Mitä uutta, kuoma?". Muuten ohjelma tulostaa viestin "Et kuulu
sisäpiiriin!".
Alkion lisääminen
Listaan voi lisätä alkioita metodilla
append.
Seuraavassa esimerkissä lista on aluksi tyhjä ja ohjelma lisää siihen
käyttäjän antamia sanoja. Ohjelma päättyy, kun käyttäjä antaa saman
sanan uudestaan.
Ohjelman tulostus voi olla seuraava:
Kirjoita sana: talo
Kirjoita sana: metsä
Kirjoita sana: auto
Kirjoita sana: tie
Kirjoita sana: metsä
Kirjoitit saman sanan uudestaan!
Kirjoitit sanat: ['talo','metsä','auto','tie']
Listan läpikäynti
Listassa olevat alkiot voi käydä läpi
for-silmukalla.
Silmukalle annetaan muuttuja ja lista, jonka jälkeen muuttujan arvo on
silmukan joka kierroksella vuorollaan yksi listan alkioista.
Seuraava ohjelma tulostaa kaikkien viikonpäivien nimet:
Ohjelman tulostus on seuraava:
maanantai
tiistai
keskiviikko
torstai
perjantai
lauantai
sunnuntai
Seuraava ohjelma kysyy käyttäjältä sanoja, kunnes käyttäjä antaa
tyhjän sanan. Sitten ohjelma tulostaa sanojen määrän ja kaikki sanat.
Ohjelman tulostus voi olla seuraava:
Kirjoita sana: apina
Kirjoita sana: banaani
Kirjoita sana: cembalo
Kirjoita sana:
Kirjoitit 3 sanaa.
Sanat ovat:
apina banaani cembalo
Tässä funktio
len kertoo, kuinka monta alkiota listassa on.
Listan metodit
Listaan liittyvät mm. seuraavat metodit:
| metodi | selitys |
lista.append(alkio) | lisää alkion listaan (tämä on jo tuttu) |
lista.index(alkio) | etsii alkion kohdan listassa |
lista.count(alkio) | laskee alkion esiintymiskerrat listassa |
lista.remove(alkio) | poistaa alkion listasta |
lista.sort() | järjestää listan alkiot |
lista.reverse() | kääntää listan toisinpäin |
Seuraava ohjelma etsii listasta käyttäjän antaman kuukauden:
Ohjelman tulostus voi olla seuraava:
Anna kuukauden nimi: syyskuu
Kuukauden numero: 9
Tällä kertaa kuukauden kohtaan listassa pitää lisätä yksi, jotta
tuloksena on tuttu kuukauden numero. Esimerkiksi jos kuukausi on
syyskuu, se on listassa kohdassa
lista[8] ja ohjelma ilmoittaa numeroksi 9.
Esimerkki: Presidentit
Seuraava ohjelma tarkistaa, kuinka monta presidenttiä käyttäjä muistaa:
Ohjelman tulostus voi olla seuraava:
Kuinka monta presidenttiä muistat?
Nimi: Kekkonen
Oikein!
Nimi: Virtanen
Ei kelpaa!
Nimi: Halonen
Oikein!
Nimi: Kekkonen
Ei kelpaa!
Nimi: Mannerheim
Oikein!
Nimi:
Muistit 3 presidenttiä!
Ohjelman alussa lista sisältää kaikkien presidenttien nimet. Aina kun
käyttäjä muistaa presidentin, ohjelma poistaa sen listasta. Tämän
ansiosta käyttäjä ei voi kerätä pisteitä antamalla saman nimen monta
kertaa. Ohjelma päättyy, jos käyttäjä antaa tyhjän nimen tai muistaa
kaikki nimet.
Esimerkki: Lukutilasto
Seuraava
ohjelma lisää käyttäjän antamia lukuja listaan, kunnes käyttäjä antaa
luvun nolla. Sitten ohjelma ilmoittaa listan pienimmän ja suurimman
luvun, listan lukujen summan sekä järjestyksessä kaikki eri luvut
esiintymiskertoineen.
Ohjelman tulostus voi olla seuraava:
Kirjoita luku: 5
Kirjoita luku: 3
Kirjoita luku: 5
Kirjoita luku: 8
Kirjoita luku: 2
Kirjoita luku: 2
Kirjoita luku: 5
Kirjoita luku: 0
Pienin luku: 2
Suurin luku: 8
Lukujen summa: 30
Luku 2 on listassa 2 kertaa.
Luku 3 on listassa 1 kertaa.
Luku 5 on listassa 3 kertaa.
Luku 8 on listassa 1 kertaa.
Funktiot
min,
max ja
sum
kertovat listan pienimmän luvun, suurimman luvun ja lukujen summan.
Ohjelma käy lopuksi läpi kaikki luvut mutta tulostaa jokaisen eri luvun
vain kerran. Tämän vuoksi ohjelma pitää muistissa muuttujassa
vanha edellisen kierroksen lukua.