Materjalid koostas ja kursuse viib läbi
Tartu Ülikooli arvutiteaduse instituudi programmeerimise õpetamise töörühm
< eelmine | 5. nädala sisukord | järgmine > |
5.1 Järjend
JÄRJEND
Seni on meil programmides erinevate andmete hoidmiseks olnud eraldi muutujad. Paljude ülesannete puhul on vägagi mõistlik teatud andmeid koos käsitleda - teatud andmestruktuuridena. Erinevates programmeerimiskeeltes on selle jaoks mõnevõrra erinevad vahendid. Ka konkreetses programmeerimiskeeles võib olla mitmeid võimalusi, on Pythoniski. Pythoni üheks põhiliseks andmestruktuuriks on järjend ehk list (ingl list). Siinkohal tuleb märkida, et erinevate programmeerimiskeelte ja isegi erinevate materjalide puhul võib terminoloogia erineda. Meie peame siin järjendit ja listi sünonüümideks, mujal ei pruugi see nii olla.
Järjend koosneb elementidest, mis loetletakse nurksulgudes üksteisest komadega eraldatutena. Näiteks
nädalapäevad = ["esmaspäev", "teisipäev", "kolmapäev", "neljapäev", "reede", "laupäev", "pühapäev"] temperatuurid = [-4, 2, 6, 4, 4]
Järjendis võib olla korduvaid elemente, näiteks järjendis temperatuurid
on 4
kaks korda. Eeltoodud järjendites on esimeses ainult sõned ja teises ainult täisarvud. Tegelikult võivad Pythonis ühe järjendi elemendid olla ka erinevat tüüpi, aga tavaliselt me seda võimalust ei kasuta. Järjendeid võime liigitada nende elementide tüüpide järgi. Muutujas nädalapäevad
on meil nüüd siis sõnejärjend ja muutujas temperatuurid
täisarvujärjend.
Vaatame, mis tüüpi näitab Python ise muutuja temperatuurid
puhul.
temperatuurid = [-4, 2, 6, 4, 4] print(type(temperatuurid))
Ülesanne
MÕNED OPERATSIOONID. INDEKSID
Järgmise programmis on demonstreeritud mõningaid järjendiga seotud operatsioone.
# Järjendi loomine nädalapäevad = ["esmaspäev", "teisipäev", "kolmapäev", "neljapäev", "reede", "laupäev", "pühapäev"] # Järjendi saab ekraanil väljastada print(nädalapäevad) # Elementide arvu (järjendi pikkuse) leidmine nädalapäevi = len(nädalapäevad) print('Järjendis on ' + str(nädalapäevi) + ' elementi') # Järjendisse kuulumise kontroll if "palgapäev" in nädalapäevad: print("Palgapäev on järjendis") else: print("Palgapäev ei ole järjendis") # Konkreetse elemendi väärtus indeksi (järjekorranumbri) abil print(nädalapäevad[1])
Mõnevõrra üllatav võib tunduda see, et nädalapäevad[1]
ei anna meile esimest elementi, vaid hoopis teise. Nimelt tavatsetakse programmeerimises nummerdamist alustada nullist. Tõepoolest
print(nädalapäevad[0])
annab (argimõttes) esimese elemendi. Seega tuleb olla väga tähelepanelik, kas jutt on argine või programmeerimisest. Selguse mõttes räägime siis pigem elemendi indeksist, näiteks element indeksiga 1. Nagu juba nägime märgitakse indeks nurksulgudesse.
Tegelikult ei alga ka tavaelus nummerdamine alati ühest. Näiteks on mõnedes rongijaamades platvorm 0 (Londoni King's Cross, Cardiffi keskjaam). (Eks King's Crossi jaamas ole ka muidugi platvorm 9 3/4.)
Kuna loendamine algab nullist, siis viimase elemendi indeks on ühe võrra väiksem järjendi pikkusest, järjendi nädalapäevad
puhul siis 6, sest elemente on 7.
![](https://courses.cs.ut.ee/2023/eprogalused/fall/Main/Jarjendid1?action=download&upname=indeksid.png)
Proovigem!
nädalapäevad = ["esmaspäev", "teisipäev", "kolmapäev", "neljapäev", "reede", "laupäev", "pühapäev"] print(nädalapäevad[6]) print(nädalapäevad[7])
Kui minna "üle piiri", kasutades sellist indeksit, millele vastavat elementi pole, siis ilmub veateade IndexError: list index out of range
.
Ülesanne
Pythonis on tõepoolest võimalus kasutada negatiivseid indekseid. Tegelikult me oleme seda juba kasutanud vihjes Leedu perekonnanimede ülesande juures:
Viimase tähe kontrollimiseks sobib nimi[-1] == "e"
.
Tookord oli tegemist sõnega, mida aga saabki käsitleda sümbolite jadana. Nii ongi väga mitmed (siiski mitte kõik) operatsioonid võimalikud nii järjendite kui sõnedega. (Tegelikult veel teistegi andmestruktuuridega, mida selles kursuses üldiselt ei käsitleta.)
VIILUTAMINE
Leedu perenimede ülesande juures oli veel kirjas, et kahe viimase tähe kontrollimiseks saab kasutada näiteks võrdlemist nimi[-2:] == "ne"
. Tegemist on viilutamisega, mis toimib nii järjendite kui sõnede puhul ja millega saame vastavalt alamjärjendi või alamsõne. Vaatleme viilutamise võimalusi järgmise programmi abil, kus "noa all" on (antud juhul ühesümboliliste) sõnede järjend. Meelega on sama tulemuse saamiseks kasutatud erinevaid võimalusi.
a = ['A', 'B', 'C', 'D', 'E'] print(a[0:2]) print(a[:2]) print(a[2:5]) print(a[2:]) print(a[-2:])
Enne koolonit kirjutatakse indeks, millest alates tuleb elemente kopeerida, ja kooloni järele indeks, mille juures tuleb kopeerimine lõpetada (selle indeksiga element jääb tulemusest välja). Kui algav indeks kirjutamata jätta, siis alustatakse järjendi (sõne) algusest. Kui lõpetav indeks kirjutamata jätta, siis kopeeritakse kuni järjendi (sõne) lõpuni (viimane element kaasaarvatud).
Järgmises näites viilutatakse erinevaid sõnesid - nii neid, mis on muutujale väärtuseks antud, kui ka neid, mis pole.
sõne1 = 'Tartu' print(sõne1[1:4]) sõne2 = sõne1 print(sõne2[-2:]) print("Väike-Maarja"[4:9])
Ülesanne
VEEL OPERATSIOONIDEST
Toome lõpetuseks tabeli, milles on nii juba mainitud kui mainimata võimalusi.
Avaldis | Väärtus | Kommentaar |
---|---|---|
len([2, 1, 4, 3, -5]) | 5 | Elementide arv |
min([2, 1, 4, 3]) | 1 | Minimaalne element |
max([2, 1, 4, 3]) | 4 | Maksimaalne element |
sum([2, 1, 4, 3]) | 10 | Elementide summa |
sorted([2, 1, 4, 3]) | [1, 2, 3, 4] | Tagastab järjestatud järjendi |
3 in [2, 1, 4, 3] | True | Kas on selline element? |
[2, 1] + [3, 1] | [2, 1, 3, 1] | Järjendite liitmine |
[2, 1, 4, 1].count(1) | 2 | Elemendi esinemiste arv |
[1, 2, 3] == [2, 1, 3] | False | Järjekord on oluline |
Katsetage neid julgesti!
Kontrollülesande 5.1 lahendamiseks pole tegelikult kogu seda arsenali vaja. Edasipidi aga võivad erinevad võimalused kasuks tulla küll.
Tabelis on järjendite liitmise tehe, mille abil saame järjendile ka vaid ühe elemendi lisada. Ühe elemendi lisamiseks saab samuti kasutada funktsiooni append. Järgmises näites ongi kummalegi järjendile üks element lisatud.
a = [5, 8] a.append(7) print(a) b = [5, 8] b += [7] print(b)
Vaata ka kokkuvõtvat videot:
< eelmine | 5. nädala sisukord | järgmine > |