Python Ohjelmointi

Listat

Helppo
25 min

Mihin taulukko (array) datatyyppejä tarvitaan?

Sanotaan, että meillä on sovellus ostoslistan tekemistä varten. Voisimme tehdä jotain tällaista:

ostos_1 = input("Mikä on ensimmäinen ostos?: ")
ostos_2 = input("Mikä on toinen ostos?: ")
ostos_3 = input("Mikä on kolmas ostos?: ")

print("Ostoslista: ", ostos_1, ostos_2, ostos_3)
python3 ./app.py
Mikä on ensimmäinen ostos?: Ketsuppi
Mikä on toinen ostos?: Kurkku
Mikä on kolmas ostos?: Tomaatti
Ostoslista:  Ketsuppi Kurkku Tomaatti

Ohjelma toimii, mutta siinä on aika paljon rajoitteita. Oleellisimpana että ostoksia voi olla tasan kolme, ei enempää eikä vähempää. Listoilla voimme ratkoa tämän ongelman.

Listat

Lista (List) on Pythonissa array (taulukko) datatyyppi, ja sen syntaksi on hakasulut, joiden sisällä listan alkiot (kuten ostokset ostoslistalla).

ostoslista = ["Kurkku", "Ketsuppi", "Tomaatti"]
print(ostoslista)
['Kurkku', 'Ketsuppi', 'Tomaatti']

Listalla on hyödyllisiä funktioita, kuten append, clear, count, index, reverse ja sort.

print(dir(ostoslista))
[... 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

Alkion lisääminen listaan

Alkioita voi lisätä listan loppuun append -funktiolla.

ostoslista.append("Basilika")
print(ostoslista)
['Kurkku', 'Ketsuppi', 'Tomaatti', 'Basilika']

Alkion hakeminen (indeksointi) listasta

Voit vaikkapa tulostaa tietyn arvon listasta sen indeksillä. Indeksit Pythonissa alkavat nollasta, eli ensimmäisen alkion indeksi on 0, seuraavan 1, jne.

kolmas_ostos = ostoslista[2]
print(kolmas_ostos)
Tomaatti

Alkion poistaminen listasta

Voit poistaa alkion listasta sen indeksillä käyttämällä pop -funktiota.

ostoslista.pop(1)
print(ostoslista)
['Kurkku', 'Tomaatti', 'Basilika']

Vaihtoehtoisesti voit poistaa ensimmäisen alkion listasta jolla on tietty arvo. Tämän voi tehdä remove funktiolla.

ostoslista.remove('Kurkku')
print(ostoslista)
['Tomaatti', 'Basilika']

Listan lajittelu

Listan voi lajitella sort -funktiolla. Oletusarvoisesti lajittelu tapahtuu aakkos/numerojärjestykseen.

numerot = [5, 2, 4, 3, 8, 2]
numerot.sort()
print(numerot)
[2, 2, 3, 4, 5, 8]
tekstit = ['Piano', 'Apina', 'Makrilli']
tekstit.sort()
print(tekstit)
['Apina', 'Makrilli', 'Piano']

Listan kääntäminen

Listan voi kääntää nurin reverse -funktiolla.

numerot = [5, 2, 4, 3, 8, 2]
numerot.sort()
print(numerot)
[2, 2, 3, 4, 5, 8]
numerot.reverse()
print(numerot)
[8, 5, 4, 3, 2, 2]

Alkion etsiminen listasta

Joskus haluat tietää, mistä indeksistä tietty alkio löytyy. Voit tehtä tämän index -funktiolla. Esimerkiksi "Tomaatti" löytyy indeksistä 2 (muista että indeksit alkaa nollasta).

ostoslista = ["Kurkku", "Ketsuppi", "Tomaatti"]
print(ostoslista.index("Tomaatti"))
2

Listan pituus

Listan pituus, eli listan alkioiden määrä, saadaan sisäänrakennetulla len -funktiolla.

ostoslista = ["Kurkku", "Ketsuppi", "Tomaatti", "Avokado", "Pasta", "Chili"]
print(len(ostoslista))
6

Listan subsetti (osajoukko)

Listan subsetti, eli osajoukko, saadaan seuraavalla syntaksilla.

LISTA[MISTÄ_INDEKSISTÄ:MIHIN_INDEKSIIN + 1]

Esimerkiksi, listan osajoukko alkaen indeksistä 1 (jossa on Ketsuppi) ja päättyen indeksiin 3 (Avokado) otettaisiin seuraavasti.

ostoslista = ["Kurkku", "Ketsuppi", "Tomaatti", "Avokado", "Pasta", "Chili"]

osajoukko = ostoslista[1:4]
print(osajoukko)
['Ketsuppi', 'Tomaatti', 'Avokado']

Harjoitus

Esimerkki miten ohjelman pitäisi toimia:

python3 ./app.py

Anna ensimmäinen luku: 4
Anna toinen luku: 17
Anna kolmas luku: 1

[1, 4, 17]

Olethan tarkkana datatyyppien kanssa. Jos et muuta käyttäjältä luettuja arvoja int -tyyppisiksi (tyyppipakotuksella), ohjelma ei lajittele numeroita oikein, koska tekstinä (str tyyppisenä) esimerkiksi 17 tulisi aakkosissa aiemmin kuin 4.

Jos et muista miten käyttäjältä luetaan syötettä numerona, käy kurkkaamassa aiemmista moduuleista.

Tehtävät

Tehtävä 1

Kirjoita ohjelma joka lukee kolme numeroa terminaalista, lisää ne listaan int-tyyppisenä, lajittelee listan pienimmästä numerosta suurimpaan ja lopuksi tulostaa listan print-funktiolla.

hakatemia pro

Valmis ryhtymään eettiseksi hakkeriksi?
Aloita jo tänään.

Hakatemian jäsenenä saat rajoittamattoman pääsyn Hakatemian moduuleihin, harjoituksiin ja työkaluihin, sekä pääset discord-kanavalle jossa voit pyytää apua sekä ohjaajilta että muilta Hakatemian jäseniltä.