4 Järjendite järjend

Eelmises osas sai räägitud, et kahemõõtmelisest järjendist saab elementidele ligi, kasutades kahte järjestikust nurksulgudesse paigutatud indeksit:

jarjendite_jarjend = [[1, 2, 4], [-1, 5, 0], [], ['sõne']]
print(jarjendite_jarjend[0][2])  # Väljastab 4

Samuti võime kahemõõtmelist järjendit vaadelda tavalise ühemõõtmelise järjendina, mille elemendid on lihtsalt mingid järjendid, mille sisu meid ei huvitagi. Näiteks võib meid huvitada ainult selle välimise järjendi elementide arv:

jarjendite_jarjend = [[1, 2, 4], [-1, 5, 0], [], ['sõne']]
print(len(jarjendite_jarjend))  # Väljastab 4

Või äkki hoopis tahame teha midagi tema viimase elemendiga (järjendiga), hoolimata otseselt sellest, mis elemendid selle sees on:

jarjendite_jarjend = [[1, 2, 4], [-1, 5, 0], [], ['sõne']]
viimane = jarjendite_jarjend[-1]
print(len(viimane))            # Väljastab 1
print(viimane.count(5))        # Väljastab 0
print(viimane.count('sõne'))   # Väljastab 1
print(viimane)                 # Väljastab ['sõne']

Kahemõõtmelist järjendit võime vastavalt vajadusele käsitleda kas

  • teatud tüüpi tabelina, kus iga elemendi asukoht on määratud kahe indeksiga või
  • tavalise ühemõõtmelise järjendina, mille elemendid on järjendi tüüpi väärtused.

Näiteks järjendi

inimesed = [['Kersti', 49, False], ['Jüri', 40, True], ['Eiki', 65,  True]]

puhul on esimene käsitlus sobiv, kui peame näiteks leidma, kui vana on järjendi kolmas inimene. Teine käsitlus on hea, kui peame lihtsalt kokku lugema, mitme inimese andmed järjendis on.

Nii saame leida veel näiteks iga sisemise järjendi (rea) maksimaalse elemendi:

lst = [[1, 3, 2], [4, 5, 6], [7, 8, 9]]
for rida in lst:
    print(max(rida))

Enesekontroll (1 ülesanne)

Sammhaaval järjendisse laskumine

Tegelikult võime kahemõõtmelise järjendi teise taseme (sügavatele) elementidele ligi pääseda ka kahe sammuga: esmalt eraldame meid huvitava sisemise järjendi ning siis valime sellest omakorda sobiva elemendi.

jarjendite_jarjend = [[1, 2, 4], [-1, 5, 0], [], ['sõne']]
sisemine = jarjendite_jarjend[1]
print(sisemine[0])  # Väljastab -1

Pythoni sisemuses toimub protsess samamoodi, olenemata sellest, kas valime esmalt välja rea ning sellest elemendi või kasutame korraga kahte indeksit.

Kahemõõtmelised järjendid polegi tegelikult Pythoni jaoks midagi oluliselt erinevat ühemõõtmelisest järjendist. Seega saame ka kahemõõtmelisi järjendeid tekitada juba tuttavatel viisidel:

jarjendite_jarjend = []               # Praegu on see ühemõõtmeline järjend
jarjendite_jarjend.append([1, 2, 4])  # Lisame sisemise järjendi - nüüd on kahemõõtmeline
jarjendite_jarjend += [[-1, 5, 0]]    # Pane tähele! Kahekordsed nurksulud!
tyhi = []
jarjendite_jarjend.append(tyhi)
viimane = []
viimane.append('sõne')
jarjendite_jarjend.append(viimane)
print(jarjendite_jarjend)             # Väljastab [[1, 2, 4], [-1, 5, 0], [], ['sõne']]

Selgitame natuke põhjalikumalt, miks on jarjendite_jarjend += [[-1, 5, 0]] puhul just kahekordsed nurksulud. Nii lisatakse uueks elemendiks kogu järjend [-1, 5, 0]. jarjendite_jarjend += [-1, 5, 0] puhul lisataks iga arv eraldi elemendina.

Enesekontroll (2 ülesannet)

Andmed pärinevad statistikaameti populaarseimate nimede hulgast.

 

Eritüübiliste elementidega järjendid

Kuigi Python lubab hoida ühes järjendis mitut eri tüüpi väärtust, on see üpris veaohtlik, sest programmeerija peab siis meeles pidama, mis tüüpi väärtused kuskil asuvad. Kui võimalik, siis on mõistlik püüda hoida eri tüüpi väärtuseid erinevates järjendites.

Maatriks

Kui järjendis (või muus tabelis) on igas elemendis sama arv alamelemente (ehk tabeli igal real on sama arv väärtusi), nimetatakse seda struktuuri maatriksiks. Seda matemaatikast pärinevat terminit kasutame ka edaspidi. Lähemalt võid maatriksist lugeda järgnevast lisamaterjalide peatükist.

 

Litsents

Icon for the Creative Commons Attribution 4.0 International License

Tarkvaraarendus. 2. trükk on loodud Eno Tõnisson, Tauno Palts, Kaarel Tõnisson, Heidi Meier, Merilin Säde, ja Säde Mai Krusberg jt poolt Creative Commons Attribution 4.0 International License litsentsi alusel, kui pole teisiti märgitud.

Jaga seda raamatut