{"id":43,"date":"2019-02-27T08:26:26","date_gmt":"2019-02-27T08:26:26","guid":{"rendered":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvaraarendus\/chapter\/lisalugemine-ennik\/"},"modified":"2020-07-22T14:04:13","modified_gmt":"2020-07-22T14:04:13","slug":"lisalugemine-ennik","status":"publish","type":"chapter","link":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/chapter\/lisalugemine-ennik\/","title":{"raw":"Ennik","rendered":"Ennik"},"content":{"raw":"<p class=\"vspace\">Pythonis on olemas andmestruktuur, mille nimi on <strong>ennik<\/strong> (ingl <em>tuple<\/em>). Naljakas eestikeelne nimi on tuletatud sellest, et kolme elemendiga kogumit nimetatakse kolmikuks, nelja elemendiga nelikuks, viiega viisikuks jne. Kui sellises struktuuris on suvaline arv <em>n<\/em> elementi, siis v\u00f5iks saadut nimetada nimega <em>n-ik<\/em> ehk eestip\u00e4rasemalt <em>ennik<\/em>.<\/p>\n<p class=\"vspace\">Enniku t\u00e4histamiseks kasutatakse \u00fcmarsulgusid <code>(<\/code> ja <code>)<\/code>. N\u00e4iteks kolmeelemendilise enniku ehk kolmiku saame tekitada nii:<\/p>\n\n<div>\n<div class=\"syntaxhighlighter nogutter python\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">kolmik = (1, 4, 6)<\/pre>\n<\/div>\n<\/div>\n<p class=\"vspace\">\u00dcheelemendilise enniku (\u00fcksiku) tekitamine on pisut ebaintuitiivsem:<\/p>\n\n<div>\n<div class=\"syntaxhighlighter nogutter python\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">yksik = (1,)<\/pre>\n<\/div>\n<\/div>\n<p class=\"vspace\">Koma ainukese elemendi j\u00e4rel \u00fctleb Pythonile, et tegemist on ennikuga, mitte aritmeetilise avaldisega, kus \u00fcmarsulud omavad teist t\u00e4hendust.<\/p>\n\n<h2>Ennikute omadusi<\/h2>\n<p class=\"vspace\">Paljud enniku omadused on j\u00e4rjendi omadustega \u00fcsna sarnased:<\/p>\n\n<ul>\n \t<li>Ennikus on elementide j\u00e4rjestus oluline: <code>(1, 2)<\/code> ei ole v\u00f5rdne ennikuga <code>(2, 1)<\/code>.<\/li>\n \t<li>Enniku elementide poole saab p\u00f6\u00f6rduda indeksite abil: kui <code>enn<\/code> on ennik, siis <code>enn[2]<\/code> on selle enniku kolmas element.<\/li>\n \t<li>Enniku pikkuse saame teada funktsiooni <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">len<\/code> abil.<\/li>\n \t<li>Mingi elemendi ennikusse kuulumist saame kontrollida v\u00f5tmes\u00f5na <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">in<\/code> abil: <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">3 in enn<\/code><\/code> v\u00e4\u00e4rtuseks on kas <code>True<\/code> v\u00f5i <code>False<\/code>.<\/li>\n \t<li>Funktsioonide <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">min<\/code><\/code> ja <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">max<\/code> abil saame leida ennikust vastavalt minimaalse v\u00f5i maksimaalse elemendi (eeldusel, et elemendid on mingil moel j\u00e4rjestatavad, nt arvud).<\/li>\n \t<li>Ennikut saab viilutada: <code>enn[1:5]<\/code> annab alamenniku, milles on <code>enn<\/code> elemendid indeksitega 1, 2, 3 ja 4.<\/li>\n<\/ul>\n<div class=\"lrindent round\">\n\nSiiski pole j\u00e4rjend ja ennik funktsionaalsuse m\u00f5ttes v\u00f5rdsed. Enniku k\u00f5ige olulisem erinevus peitub selles, et see <strong>ei ole muudetav<\/strong> (t\u00e4psemalt <strong>muteeritav<\/strong>, ingl <em>mutable<\/em>). Ennikusse ei ole p\u00e4rast selle tekitamist v\u00f5imalik elemente lisada, neid eemaldada ega muuta, seega pole ennikul n\u00e4iteks j\u00e4rjendite tuntud k\u00e4ske <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">append<\/code>, <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">remove<\/code><\/code>, <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">pop<\/code><\/code>, <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">insert<\/code><\/code>, <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">reverse<\/code><\/code> ega <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">extend<\/code>. Sellest tuleneb, et ennik on alati fikseeritud pikkusega.\n\n<\/div>\n<div>\n<h3>Enesekontroll (1 \u00fclesanne)<\/h3>\n<code>[h5p id=\"13\"]<\/code>\n<h2>Ennikute kasutusalasid<\/h2>\n<\/div>\n<p class=\"vspace\">Ennikuid kasutatakse sageli just siis, kui struktuuri pole vaja programmi k\u00e4ivitamise ajal muuta. N\u00e4iteks kui programmis on vaja t\u00e4histada objekte, millel on mitu omadust, kuid mida pole vaja programmi t\u00f6\u00f6tamise ajal muuta, siis on m\u00f5istlik nende esitamiseks kasutada ennikuid.<\/p>\n<p class=\"vspace\">Samuti kasutatakse ennikuid siis, kui funktsioonist on vaja tagastada mitu v\u00e4\u00e4rtust. N\u00e4iteks see funktsioon leiab kahest j\u00e4rjendist elemendid, mille korrutis on suurim, ja tagastab need elemendid paarina:<\/p>\n\n<div>\n<div class=\"syntaxhighlighter nogutter python\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">def suurim_korrutis(lst1, lst2):\n    suurimad = (0, 0)\n    for el1 in lst1:\n        for el2 in lst2:\n            if el1 * el2 &gt; suurimad[0] * suurimad[1]:\n                suurimad = (el1, el2)\n    return suurimad<\/pre>\n<\/div>\n<\/div>\n<h3 class=\"vspace\">Enesekontroll (1 \u00fclesanne)<\/h3>\n<div>\n\n<code>[h5p id=\"14\"]<\/code>\n<h3>Mitme v\u00e4\u00e4rtuse tagastamisest<\/h3>\n<\/div>\n<p class=\"vspace\">Kui \u00fche funktsiooni asemel, mis tagastab enniku tulemustest, on v\u00f5imalik teha mitu funktsiooni, millest iga\u00fcks leiab \u00fche \u00fcksiku (v\u00e4iksema) osa tulemustest, siis on tihti parem stiil valida mitme funktsiooniga variant. Mida v\u00e4iksemad \u00fclesanded saate eri funktsioonide vahel \u00e4ra jaotada, seda lihtsam on tavaliselt koodist aru saada, sealt vigu otsida ja seda hallata.<\/p>","rendered":"<p class=\"vspace\">Pythonis on olemas andmestruktuur, mille nimi on <strong>ennik<\/strong> (ingl <em>tuple<\/em>). Naljakas eestikeelne nimi on tuletatud sellest, et kolme elemendiga kogumit nimetatakse kolmikuks, nelja elemendiga nelikuks, viiega viisikuks jne. Kui sellises struktuuris on suvaline arv <em>n<\/em> elementi, siis v\u00f5iks saadut nimetada nimega <em>n-ik<\/em> ehk eestip\u00e4rasemalt <em>ennik<\/em>.<\/p>\n<p class=\"vspace\">Enniku t\u00e4histamiseks kasutatakse \u00fcmarsulgusid <code>(<\/code> ja <code>)<\/code>. N\u00e4iteks kolmeelemendilise enniku ehk kolmiku saame tekitada nii:<\/p>\n<div>\n<div class=\"syntaxhighlighter nogutter python\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">kolmik = (1, 4, 6)<\/pre>\n<\/div>\n<\/div>\n<p class=\"vspace\">\u00dcheelemendilise enniku (\u00fcksiku) tekitamine on pisut ebaintuitiivsem:<\/p>\n<div>\n<div class=\"syntaxhighlighter nogutter python\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">yksik = (1,)<\/pre>\n<\/div>\n<\/div>\n<p class=\"vspace\">Koma ainukese elemendi j\u00e4rel \u00fctleb Pythonile, et tegemist on ennikuga, mitte aritmeetilise avaldisega, kus \u00fcmarsulud omavad teist t\u00e4hendust.<\/p>\n<h2>Ennikute omadusi<\/h2>\n<p class=\"vspace\">Paljud enniku omadused on j\u00e4rjendi omadustega \u00fcsna sarnased:<\/p>\n<ul>\n<li>Ennikus on elementide j\u00e4rjestus oluline: <code>(1, 2)<\/code> ei ole v\u00f5rdne ennikuga <code>(2, 1)<\/code>.<\/li>\n<li>Enniku elementide poole saab p\u00f6\u00f6rduda indeksite abil: kui <code>enn<\/code> on ennik, siis <code>enn[2]<\/code> on selle enniku kolmas element.<\/li>\n<li>Enniku pikkuse saame teada funktsiooni <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">len<\/code> abil.<\/li>\n<li>Mingi elemendi ennikusse kuulumist saame kontrollida v\u00f5tmes\u00f5na <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">in<\/code> abil: <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">3 in enn<\/code><\/code> v\u00e4\u00e4rtuseks on kas <code>True<\/code> v\u00f5i <code>False<\/code>.<\/li>\n<li>Funktsioonide <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">min<\/code><\/code> ja <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">max<\/code> abil saame leida ennikust vastavalt minimaalse v\u00f5i maksimaalse elemendi (eeldusel, et elemendid on mingil moel j\u00e4rjestatavad, nt arvud).<\/li>\n<li>Ennikut saab viilutada: <code>enn[1:5]<\/code> annab alamenniku, milles on <code>enn<\/code> elemendid indeksitega 1, 2, 3 ja 4.<\/li>\n<\/ul>\n<div class=\"lrindent round\">\n<p>Siiski pole j\u00e4rjend ja ennik funktsionaalsuse m\u00f5ttes v\u00f5rdsed. Enniku k\u00f5ige olulisem erinevus peitub selles, et see <strong>ei ole muudetav<\/strong> (t\u00e4psemalt <strong>muteeritav<\/strong>, ingl <em>mutable<\/em>). Ennikusse ei ole p\u00e4rast selle tekitamist v\u00f5imalik elemente lisada, neid eemaldada ega muuta, seega pole ennikul n\u00e4iteks j\u00e4rjendite tuntud k\u00e4ske <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">append<\/code>, <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">remove<\/code><\/code>, <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">pop<\/code><\/code>, <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">insert<\/code><\/code>, <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">reverse<\/code><\/code> ega <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">extend<\/code>. Sellest tuleneb, et ennik on alati fikseeritud pikkusega.<\/p>\n<\/div>\n<div>\n<h3>Enesekontroll (1 \u00fclesanne)<\/h3>\n<p><code><\/p>\n<div id=\"h5p-13\">\n<div class=\"h5p-iframe-wrapper\"><iframe id=\"h5p-iframe-13\" class=\"h5p-iframe\" data-content-id=\"13\" style=\"height:1px\" src=\"about:blank\" frameBorder=\"0\" scrolling=\"no\" title=\"andmestruktuurid-2-1-\u00fcksk\u00fcs\"><\/iframe><\/div>\n<\/div>\n<p><\/code><\/p>\n<h2>Ennikute kasutusalasid<\/h2>\n<\/div>\n<p class=\"vspace\">Ennikuid kasutatakse sageli just siis, kui struktuuri pole vaja programmi k\u00e4ivitamise ajal muuta. N\u00e4iteks kui programmis on vaja t\u00e4histada objekte, millel on mitu omadust, kuid mida pole vaja programmi t\u00f6\u00f6tamise ajal muuta, siis on m\u00f5istlik nende esitamiseks kasutada ennikuid.<\/p>\n<p class=\"vspace\">Samuti kasutatakse ennikuid siis, kui funktsioonist on vaja tagastada mitu v\u00e4\u00e4rtust. N\u00e4iteks see funktsioon leiab kahest j\u00e4rjendist elemendid, mille korrutis on suurim, ja tagastab need elemendid paarina:<\/p>\n<div>\n<div class=\"syntaxhighlighter nogutter python\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">def suurim_korrutis(lst1, lst2):\n    suurimad = (0, 0)\n    for el1 in lst1:\n        for el2 in lst2:\n            if el1 * el2 &gt; suurimad[0] * suurimad[1]:\n                suurimad = (el1, el2)\n    return suurimad<\/pre>\n<\/div>\n<\/div>\n<h3 class=\"vspace\">Enesekontroll (1 \u00fclesanne)<\/h3>\n<div>\n<p><code><\/p>\n<div id=\"h5p-14\">\n<div class=\"h5p-iframe-wrapper\"><iframe id=\"h5p-iframe-14\" class=\"h5p-iframe\" data-content-id=\"14\" style=\"height:1px\" src=\"about:blank\" frameBorder=\"0\" scrolling=\"no\" title=\"andmestruktuurid-2-2-\u00fcksk\u00fcs\"><\/iframe><\/div>\n<\/div>\n<p><\/code><\/p>\n<h3>Mitme v\u00e4\u00e4rtuse tagastamisest<\/h3>\n<\/div>\n<p class=\"vspace\">Kui \u00fche funktsiooni asemel, mis tagastab enniku tulemustest, on v\u00f5imalik teha mitu funktsiooni, millest iga\u00fcks leiab \u00fche \u00fcksiku (v\u00e4iksema) osa tulemustest, siis on tihti parem stiil valida mitme funktsiooniga variant. Mida v\u00e4iksemad \u00fclesanded saate eri funktsioonide vahel \u00e4ra jaotada, seda lihtsam on tavaliselt koodist aru saada, sealt vigu otsida ja seda hallata.<\/p>\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-43","chapter","type-chapter","status-publish","hentry"],"part":42,"_links":{"self":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/chapters\/43","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":2,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/chapters\/43\/revisions"}],"predecessor-version":[{"id":87,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/chapters\/43\/revisions\/87"}],"part":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/parts\/42"}],"metadata":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/chapters\/43\/metadata\/"}],"wp:attachment":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/wp\/v2\/media?parent=43"}],"wp:term":[{"taxonomy":"chapter-type","embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/chapter-type?post=43"},{"taxonomy":"contributor","embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/wp\/v2\/contributor?post=43"},{"taxonomy":"license","embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/wp\/v2\/license?post=43"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}