{"id":26,"date":"2019-03-03T16:12:17","date_gmt":"2019-03-03T16:12:17","guid":{"rendered":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvaraarendus\/chapter\/kahemootmelinejarjend\/"},"modified":"2020-07-22T14:04:12","modified_gmt":"2020-07-22T14:04:12","slug":"kahemootmelinejarjend","status":"publish","type":"chapter","link":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/chapter\/kahemootmelinejarjend\/","title":{"raw":"Kahem\u00f5\u00f5tmeline j\u00e4rjend","rendered":"Kahem\u00f5\u00f5tmeline j\u00e4rjend"},"content":{"raw":"<p class=\"vspace\">J\u00e4rjend on Pythoni andmestruktuur, mille abil saab \u00fches muutujas hoida mitut v\u00e4\u00e4rtust. N\u00e4iteks muutujale <code>kursus<\/code> omistatakse j\u00e4rjend, mis koosneb kahest s\u00f5nest:<\/p>\n\n<div>\n<div class=\"syntaxhighlighter nogutter python\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">kursus = ['Tarkvaraarendus', '2019']<\/pre>\n<\/div>\n<\/div>\n<p class=\"vspace\">Varem oleme kasutanud peamiselt j\u00e4rjendeid, mille elemendid on arvud v\u00f5i s\u00f5ned. Tegelikult v\u00f5ime j\u00e4rjendis hoida igasugust t\u00fc\u00fcpi v\u00e4\u00e4rtuseid, kusjuures j\u00e4rjendi elemendid v\u00f5ivad Pythonis isegi eri t\u00fc\u00fcpi olla:<code class=\"python plain\"><\/code><code class=\"python plain\"><\/code><code class=\"python plain\"><\/code><\/p>\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">huvitav_jarjend = ['Taisi Telk', 29, True]<\/pre>\n<p class=\"vspace\"><code class=\"python plain\"><\/code><\/p>\n<p class=\"vspace\">Muuhulgas v\u00f5ivad j\u00e4rjendi elementideks olla ka teised j\u00e4rjendid:<code class=\"python plain\"><\/code><\/p>\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">kahemootmeline_jarjend = [[30, 2], [42]]<\/pre>\nSiin on tegemist j\u00e4rjendiga, millel on kaks elementi. Esimene element on j\u00e4rjend, mille elementideks on arvud <code>30<\/code> ja <code>2<\/code>, ning teine on j\u00e4rjend, mille ainsaks elemendiks on <code>42<\/code>. Kasutame v\u00e4rve, et r\u00f5hutada j\u00e4rjendi mitmetasemelist \u00fclesehitust.\n<p class=\"vspace\"><strong>j\u00e4rjend = <span style=\"color: #ff0000\">[<\/span><span style=\"color: #0000ff\">[<\/span><span style=\"color: #808080\">30<\/span>, <span style=\"color: #808080\">2<\/span><span style=\"color: #0000ff\">]<\/span>, <span style=\"color: #0000ff\">[<\/span><span style=\"color: #808080\">42<\/span><span style=\"color: #0000ff\">]<\/span><span style=\"color: #ff0000\">] <\/span><\/strong><\/p>\n<p class=\"vspace\">Punane t\u00e4histab v\u00e4limist j\u00e4rjendit ja sinine tema elementj\u00e4rjendeid. Nende sisemiste j\u00e4rjendite elemendid on hallid.<\/p>\nSee on meie esimene kahem\u00f5\u00f5tmeline andmestruktuur. Kahem\u00f5\u00f5tmeliseks nimetatakse seda sellep\u00e4rast, et k\u00f5ige sisemiste elementide (eelmises n\u00e4ites <code>30<\/code>, <code>2<\/code>, <code>42<\/code>) asukoht m\u00e4\u00e4ratakse kahe m\u00f5\u00f5tme abil. Esiteks tuleb m\u00e4\u00e4rata, mitmendas sisemises j\u00e4rjendis element asub ja teiseks, mitmes element ta on selle v\u00e4ljavalitud sisemise j\u00e4rjendi elementide hulgas. Seejuures peame meeles, et j\u00e4rjendi elemente nummerdatakse indeksite abil ja indeksid algavad alati nullist.\n\nN\u00e4iteks kui tahame eelmises n\u00e4ites <strong><span style=\"color: #ff0000\">[<\/span><span style=\"color: #0000ff\">[<\/span>30, 2<span style=\"color: #0000ff\">]<\/span>, <span style=\"color: #0000ff\">[<\/span>42<span style=\"color: #0000ff\">]<\/span><span style=\"color: #ff0000\">]<\/span><\/strong> tekitatud j\u00e4rjendist saada k\u00e4tte v\u00e4\u00e4rtust <code>2<\/code>, siis leiame, et ta asub <span style=\"color: #ff0000\">v\u00e4limises j\u00e4rjendis<\/span> indeksiga 0 (esimene element) ja selle sees olevas <span style=\"color: #0000ff\">sisemises j\u00e4rjendis <\/span>on ta element indeksiga <code>1 <\/code>(teine element). Koodis pannakse see kirja niimoodi:\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">kahemootmeline_jarjend = [[30, 2], [42]]\n\nprint(kahemootmeline_jarjend[0][1])  # V\u00e4ljastab 2\n<\/pre>\n<p class=\"python plain\"><code class=\"python plain\"><\/code><\/p>\n\n<div class=\"lrindent round\">\n\nKahem\u00f5\u00f5tmelise j\u00e4rjendi sisemiste elementide poole p\u00f6\u00f6rdumiseks paigutatakse p\u00e4rast muutuja nime kaks paari nurksulge. Esimesed nurksulud sisaldavad indeksit, mis m\u00e4\u00e4rab vaadeldava sisemise j\u00e4rjendi. Teiste nurksulgude sisse kirjutatakse indeks, mis m\u00e4\u00e4rab elemendi asukoha saadud sisemises j\u00e4rjendis.\n\n<\/div>\n<p class=\"vspace\">T\u00e4hele tuleb panna, et tavaline \"inimlik\" ja programmeerimise k\u00f5nepruuk erinevad. R\u00e4\u00e4kides j\u00e4rjendi <code>a<\/code> esimese elemendi teisest elemendist peetakse silmas ilmselt elementi <code>a[0][1]<\/code>.<\/p>\n<p class=\"vspace\">Kahem\u00f5\u00f5tmelist j\u00e4rjendit v\u00f5ime visualiseerida ka kahe ruumim\u00f5\u00f5tme abil. Sel juhul v\u00f5iks esimesest indeksist m\u00f5elda kui rea indeksist ja teisest kui veeru indeksist. Siis n\u00e4eb meie n\u00e4itej\u00e4rjend v\u00e4lja selline:<\/p>\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">30 2\n42<\/pre>\n<p class=\"python value\"><code class=\"python value\"><\/code><code class=\"python value\"><\/code><\/p>\n<p class=\"vspace\">Elemendi v\u00e4\u00e4rtusega <code>2<\/code> leiab t\u00f5esti sellest tabelist reast indeksiga <code>0<\/code> ja veerust indeksiga <code>1<\/code>.<\/p>\n<p class=\"vspace\">V\u00e4ga soovitav on vastata enesetesti k\u00fcsimustele - nii \u00f5igesti kui ka valesti. Kuidas muidu n\u00e4iteks funktsiooni <code>len<\/code> toimimisest paremini aru saada?<\/p>\n\n<h3>Enesekontroll (3 \u00fclesannet)<\/h3>\n<code>[h5p id=\"1\"]<\/code>\n\n&nbsp;\n<h2>Rohkemate m\u00f5\u00f5tmetega j\u00e4rjendid<\/h2>\n<div>\n\nKui j\u00e4rjendite sees saab hoida j\u00e4rjendeid, siis kas nende sees saab hoida omakorda veel j\u00e4rjendeid? Jah, tehniliselt ei piira meid miski tekitamast \u00fcksk\u00f5ik kui s\u00fcgavaid struktuure. V\u00f5ime isegi m\u00f5elda j\u00e4rjendite peale, kus igal s\u00fcgavusastmel v\u00f5ib olla kas n-\u00f6 l\u00f5ppelemente v\u00f5i veel j\u00e4rjendeid. Sellist andmestruktuuri v\u00f5ib nimetada <em>n-m\u00f5\u00f5tmeliseks j\u00e4rjendiks<\/em>. Kuidas tegutseda andmestruktuuriga, mille s\u00fcgavust me ei tea? Sellest r\u00e4\u00e4gime selle kursuse viimastel n\u00e4dalatel <em>rekursiivsete<\/em> andmestruktuuride juures.\n\n<\/div>","rendered":"<p class=\"vspace\">J\u00e4rjend on Pythoni andmestruktuur, mille abil saab \u00fches muutujas hoida mitut v\u00e4\u00e4rtust. N\u00e4iteks muutujale <code>kursus<\/code> omistatakse j\u00e4rjend, mis koosneb kahest s\u00f5nest:<\/p>\n<div>\n<div class=\"syntaxhighlighter nogutter python\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">kursus = ['Tarkvaraarendus', '2019']<\/pre>\n<\/div>\n<\/div>\n<p class=\"vspace\">Varem oleme kasutanud peamiselt j\u00e4rjendeid, mille elemendid on arvud v\u00f5i s\u00f5ned. Tegelikult v\u00f5ime j\u00e4rjendis hoida igasugust t\u00fc\u00fcpi v\u00e4\u00e4rtuseid, kusjuures j\u00e4rjendi elemendid v\u00f5ivad Pythonis isegi eri t\u00fc\u00fcpi olla:<code class=\"python plain\"><\/code><code class=\"python plain\"><\/code><code class=\"python plain\"><\/code><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">huvitav_jarjend = ['Taisi Telk', 29, True]<\/pre>\n<p class=\"vspace\"><code class=\"python plain\"><\/code><\/p>\n<p class=\"vspace\">Muuhulgas v\u00f5ivad j\u00e4rjendi elementideks olla ka teised j\u00e4rjendid:<code class=\"python plain\"><\/code><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">kahemootmeline_jarjend = [[30, 2], [42]]<\/pre>\n<p>Siin on tegemist j\u00e4rjendiga, millel on kaks elementi. Esimene element on j\u00e4rjend, mille elementideks on arvud <code>30<\/code> ja <code>2<\/code>, ning teine on j\u00e4rjend, mille ainsaks elemendiks on <code>42<\/code>. Kasutame v\u00e4rve, et r\u00f5hutada j\u00e4rjendi mitmetasemelist \u00fclesehitust.<\/p>\n<p class=\"vspace\"><strong>j\u00e4rjend = <span style=\"color: #ff0000\">[<\/span><span style=\"color: #0000ff\">[<\/span><span style=\"color: #808080\">30<\/span>, <span style=\"color: #808080\">2<\/span><span style=\"color: #0000ff\">]<\/span>, <span style=\"color: #0000ff\">[<\/span><span style=\"color: #808080\">42<\/span><span style=\"color: #0000ff\">]<\/span><span style=\"color: #ff0000\">] <\/span><\/strong><\/p>\n<p class=\"vspace\">Punane t\u00e4histab v\u00e4limist j\u00e4rjendit ja sinine tema elementj\u00e4rjendeid. Nende sisemiste j\u00e4rjendite elemendid on hallid.<\/p>\n<p>See on meie esimene kahem\u00f5\u00f5tmeline andmestruktuur. Kahem\u00f5\u00f5tmeliseks nimetatakse seda sellep\u00e4rast, et k\u00f5ige sisemiste elementide (eelmises n\u00e4ites <code>30<\/code>, <code>2<\/code>, <code>42<\/code>) asukoht m\u00e4\u00e4ratakse kahe m\u00f5\u00f5tme abil. Esiteks tuleb m\u00e4\u00e4rata, mitmendas sisemises j\u00e4rjendis element asub ja teiseks, mitmes element ta on selle v\u00e4ljavalitud sisemise j\u00e4rjendi elementide hulgas. Seejuures peame meeles, et j\u00e4rjendi elemente nummerdatakse indeksite abil ja indeksid algavad alati nullist.<\/p>\n<p>N\u00e4iteks kui tahame eelmises n\u00e4ites <strong><span style=\"color: #ff0000\">[<\/span><span style=\"color: #0000ff\">[<\/span>30, 2<span style=\"color: #0000ff\">]<\/span>, <span style=\"color: #0000ff\">[<\/span>42<span style=\"color: #0000ff\">]<\/span><span style=\"color: #ff0000\">]<\/span><\/strong> tekitatud j\u00e4rjendist saada k\u00e4tte v\u00e4\u00e4rtust <code>2<\/code>, siis leiame, et ta asub <span style=\"color: #ff0000\">v\u00e4limises j\u00e4rjendis<\/span> indeksiga 0 (esimene element) ja selle sees olevas <span style=\"color: #0000ff\">sisemises j\u00e4rjendis <\/span>on ta element indeksiga <code>1 <\/code>(teine element). Koodis pannakse see kirja niimoodi:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">kahemootmeline_jarjend = [[30, 2], [42]]\n\nprint(kahemootmeline_jarjend[0][1])  # V\u00e4ljastab 2\n<\/pre>\n<p class=\"python plain\"><code class=\"python plain\"><\/code><\/p>\n<div class=\"lrindent round\">\n<p>Kahem\u00f5\u00f5tmelise j\u00e4rjendi sisemiste elementide poole p\u00f6\u00f6rdumiseks paigutatakse p\u00e4rast muutuja nime kaks paari nurksulge. Esimesed nurksulud sisaldavad indeksit, mis m\u00e4\u00e4rab vaadeldava sisemise j\u00e4rjendi. Teiste nurksulgude sisse kirjutatakse indeks, mis m\u00e4\u00e4rab elemendi asukoha saadud sisemises j\u00e4rjendis.<\/p>\n<\/div>\n<p class=\"vspace\">T\u00e4hele tuleb panna, et tavaline &#8220;inimlik&#8221; ja programmeerimise k\u00f5nepruuk erinevad. R\u00e4\u00e4kides j\u00e4rjendi <code>a<\/code> esimese elemendi teisest elemendist peetakse silmas ilmselt elementi <code>a[0][1]<\/code>.<\/p>\n<p class=\"vspace\">Kahem\u00f5\u00f5tmelist j\u00e4rjendit v\u00f5ime visualiseerida ka kahe ruumim\u00f5\u00f5tme abil. Sel juhul v\u00f5iks esimesest indeksist m\u00f5elda kui rea indeksist ja teisest kui veeru indeksist. Siis n\u00e4eb meie n\u00e4itej\u00e4rjend v\u00e4lja selline:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">30 2\n42<\/pre>\n<p class=\"python value\"><code class=\"python value\"><\/code><code class=\"python value\"><\/code><\/p>\n<p class=\"vspace\">Elemendi v\u00e4\u00e4rtusega <code>2<\/code> leiab t\u00f5esti sellest tabelist reast indeksiga <code>0<\/code> ja veerust indeksiga <code>1<\/code>.<\/p>\n<p class=\"vspace\">V\u00e4ga soovitav on vastata enesetesti k\u00fcsimustele &#8211; nii \u00f5igesti kui ka valesti. Kuidas muidu n\u00e4iteks funktsiooni <code>len<\/code> toimimisest paremini aru saada?<\/p>\n<h3>Enesekontroll (3 \u00fclesannet)<\/h3>\n<p><code><\/p>\n<div id=\"h5p-1\">\n<div class=\"h5p-iframe-wrapper\"><iframe id=\"h5p-iframe-1\" class=\"h5p-iframe\" data-content-id=\"1\" style=\"height:1px\" src=\"about:blank\" frameBorder=\"0\" scrolling=\"no\" title=\"2dj\u00e4rjend-1-1-kolmk\u00fcs\"><\/iframe><\/div>\n<\/div>\n<p><\/code><\/p>\n<p>&nbsp;<\/p>\n<h2>Rohkemate m\u00f5\u00f5tmetega j\u00e4rjendid<\/h2>\n<div>\n<p>Kui j\u00e4rjendite sees saab hoida j\u00e4rjendeid, siis kas nende sees saab hoida omakorda veel j\u00e4rjendeid? Jah, tehniliselt ei piira meid miski tekitamast \u00fcksk\u00f5ik kui s\u00fcgavaid struktuure. V\u00f5ime isegi m\u00f5elda j\u00e4rjendite peale, kus igal s\u00fcgavusastmel v\u00f5ib olla kas n-\u00f6 l\u00f5ppelemente v\u00f5i veel j\u00e4rjendeid. Sellist andmestruktuuri v\u00f5ib nimetada <em>n-m\u00f5\u00f5tmeliseks j\u00e4rjendiks<\/em>. Kuidas tegutseda andmestruktuuriga, mille s\u00fcgavust me ei tea? Sellest r\u00e4\u00e4gime selle kursuse viimastel n\u00e4dalatel <em>rekursiivsete<\/em> andmestruktuuride juures.<\/p>\n<\/div>\n","protected":false},"author":3,"menu_order":1,"template":"","meta":{"pb_show_title":"on","pb_short_title":"","pb_subtitle":"","pb_authors":[],"pb_section_license":""},"chapter-type":[],"contributor":[],"license":[],"class_list":["post-26","chapter","type-chapter","status-publish","hentry"],"part":25,"_links":{"self":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/chapters\/26","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/chapters"}],"about":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/wp\/v2\/types\/chapter"}],"author":[{"embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/wp\/v2\/users\/3"}],"version-history":[{"count":1,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/chapters\/26\/revisions"}],"predecessor-version":[{"id":27,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/chapters\/26\/revisions\/27"}],"part":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/parts\/25"}],"metadata":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/chapters\/26\/metadata\/"}],"wp:attachment":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/wp\/v2\/media?parent=26"}],"wp:term":[{"taxonomy":"chapter-type","embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/chapter-type?post=26"},{"taxonomy":"contributor","embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/wp\/v2\/contributor?post=26"},{"taxonomy":"license","embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/wp\/v2\/license?post=26"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}