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.
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ä.