Institute of Computer Science
  1. Courses
  2. 2023/24 spring
  3. Introduction to Programming II (MTAT.03.256)
ET
Log in

Introduction to Programming II 2023/24 spring

  • Kursuse info
  • 1. Kahemõõtmeline järjend

1.1 Sissejuhatus 1.2 Järjendite järjend 1.3 Maatriks 1.4 Silmaring: Masinõpe

  • 2. Kahekordne tsükkel
  • 3. Andmestruktuurid
  • 4. Viitamine ja muteerimine
  • 5. Testimine ja silumine. Rekursioon
  • 6. Rekursioon II
  • 7. Objektorienteeritud programmeerimine
I OSA sisukord

1.2 JÄRJENDITE JÄRJEND

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

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

Kuid 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']

Eelmine näide oli kunstlik - tegelikult võivad erinevate andmetüüpidega järjendid olla muidugi ka sisukamad.

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

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 on sobiv, kui peame näiteks leidma, kui vana on järjendi kolmas inimene ja 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))

Ülesanne

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 "kõhus" toimub kõik täpselt samamoodi, olenemata sellest, kas valime eraldi välja rea ning sellest elemendi või kasutame kohe kahte indeksit järjest.

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 [-1, 5, 0]. jarjendite_jarjend += [-1, 5, 0] puhul lisataks iga arv eraldi elemendina.

Ülesanne

Andmed pärinevad statistikaameti populaarseimate nimede hulgast.

Ülesanne

Kuigi Python lubab hoida ühes järjendis mitut eri tüüpi väärtust, siis see on ü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.


I OSA sisukord
  • Institute of Computer Science
  • Faculty of Science and Technology
  • University of Tartu
In case of technical problems or questions write to:

Contact the course organizers with the organizational and course content questions.
The proprietary copyrights of educational materials belong to the University of Tartu. The use of educational materials is permitted for the purposes and under the conditions provided for in the copyright law for the free use of a work. When using educational materials, the user is obligated to give credit to the author of the educational materials.
The use of educational materials for other purposes is allowed only with the prior written consent of the University of Tartu.
Terms of use for the Courses environment