Järjendid
Järjend (ingl list) on andmetüüp loetelude esitamiseks. Järjendi loomiseks on kõige lihtsam viis kirjutada järjendisse kuuluvad väärtused (ehk järjendi elemendid) komadega eraldatult nurksulgude vahele.
numbrid = [5, 1, 6, 8, 3.14] nimed = ["Ats", "Lennart", "Keit"] segu = [3, "õun"]
Salvestasime muutujasse andmed. Erinevalt sõnest saab järjendisse salvestada erinevaid tüüpi andmeid. Kui me oleme järjendi kirja pannud, siis tekib loomulikult küsimus, mida sellega teha saab? Mõnesid põhioperatsioone demonstreerib järgnev programm:
loomad = ["karu", "rebane", "koer", "kotkas"] print("Praegune järjend on selline: ") print(loomad) loomade_arv = len(loomad) print("Järjendis on " + str(loomade_arv) + " looma!") loomad = loomad + ["kajakas", "hüljes", "rebane"] print("Uus järjend on selline: ") print(loomad) if "rebane" in loomad: rebasteArv = loomad.count("rebane") print("Rebaseid on loomade järjendis " + str(rebasteArv)) else: print("Rebaseid ei ole loomade järjendis!") koduloom = loomad[2] print("Järjendi kolmas element on koduloom " + koduloom)
Katseta programm ise läbi. Mis ilmub ekraanile?
Ilmselt märkasid kahte operatsiooni (len ja in), mida oled juba kasutanud sõnede puhul. Kuna sõnet saab vaadelda kui sümbolite järjendit, siis ongi Pythonis korraldatud nii, et paljud järjendioperatsioonid toimivad ka sõnedega.
Mõned olulisimad järjendioperatsioonid.
Avaldis | Väärtus | Selgitus |
---|---|---|
min([2, 1, 3]) | 1 | Minimaalne element |
max([2, 1, 3]) | 3 | Maksimaalne element |
sorted([2, 1, 3]) | [1, 2, 3] | Tagastab järjestatud järjendi |
[1, 2] == [2, 1] | False | Elementide järjekord loeb |
sum([2, 1, 3]) | 6 | Elementide summa |
Nagu sõnedel on ka järjenditel indeksid, mis näitavad elemendi positsiooni. Samal põhimõttel saab järjendist elemente.
a = [1,2,3,4] number = a[2]
Mis väljastatakse print(number) korral?
Järjendi video
Enesekontroll
Negatiivsed indeksid
Vahepeal võib tulla ette, et me tahame järjendi lõpus olevaid elemente. Selleks, et ei peaks lugema hakkama, kus nad asuvad, on Pythonis negatiivsed indeksid.
järjend = [1,2,3,4,5,6,7] print(järjend[-1])
Ekraanile ilmub kõige tagumine element ehk 7.
Funktsioon range. Saab kasutada 2 või 3 argumendiga. Järgnevas käsurea näites kasutame jälle funktsiooni list, et näha, mida mingi range variant tähendab.
>>> list(range(5)) [0, 1, 2, 3, 4] >>> list(range(0, 5)) [0, 1, 2, 3, 4] >>> list(range(2, 5)) [2, 3, 4] >>> list(range(0, 15, 2)) [0, 2, 4, 6, 8, 10, 12, 14] >>> list(range(5, 0, -1)) [5, 4, 3, 2, 1] >>> list(range(0, 5, 1)) [0, 1, 2, 3, 4]
Ühe argumendiga variandi puhul algab loetelu 0-st ning lõpeb enne näidatud argumendi väärtuseni jõudmist. Kahe argumendi puhul algab loetelu esimese argumendi väärtusest ja lõpeb enne teise argumendini jõudmist. Kolme argumendi puhul näitab kolmas argument väärtuste kasvamise sammu.
Tihti on tarvis teha mingi sõne pisut suuremateks juppideks kui üksikud tähed – näiteks võib olla vaja jagada sõnena esitatud lause eraldi sõnadeks. Selle jaoks saab kasutada sõnemeetodit split.
>>>"Tere Maailm!".split() ['Tere', 'Maailm!'] >>> "t;ere;31;p;äeva".split(";") ['t', 'ere', '31', 'p', 'äeva']
Kui split-i kasutada ilma argumentideta, siis tehakse lõikamine tühikute, tabulaatorite ja reavahetuste kohalt. Kui anda ette mingi muu sümbol, siis lõigatakse sõne juppideks just selle sümboli kohalt.
Käsu split „vastand“ on meetod join:
>>> ' '.join(['Tere', 'hommikust']) 'Tere hommikust' >>> ';'.join(['CY2X44', '3', '66', 'T']) 'CY2X44;3;66;T'
Enesekontroll
Järjendite viilutamine
Kirjutades nurksulgudesse indeksi asemel indeksivahemiku on järjendist (ja sõnedest) võimalik võtta alamjärjendeid (alamsõnesid):
>>> a = ['a', 'b', 'c', 'd', 'e', 'f'] >>> a[0:2] ['a', 'b'] >>> a[:2] ['a', 'b'] >>> a[2:6] ['c', 'd', 'e', 'f'] >>> a[2:] ['c', 'd', 'e', 'f'] >>> a[-2:] ['e', 'f'] >>> s = "Tere" >>> s[0:3] 'Ter'
Koolonist vasakule tuleb kirjutada see indeks, millest alates tuleb elemente tulemusse kopeerida, ning koolonist paremale see indeks, mille juures tuleb kopeerimine lõpetada (st selle indeksiga element jääb tulemusest välja). Kui vasak indeks jätta kirjutamata, siis alustatakse esimesest elemendist, ja kui parem indeks jätta kirjutamata, siis kopeeritakse kuni järjendi lõpuni (viimane element kaasa arvatud).
Eelmises peatükis õppisime, kuidas for-tsükliga faili lugeda. Veel kaks funktsiooni on readline ja readlines. readline loeb failist ühe rea. See võib kasulik olla, kui teame, mis failis on, et sealt ainult rida lugeda. Veel on käsk readlines, mis loeb kõik failis olevad read ja salvestab nad järjendina. Kasutame juba varasemalt loodud teksitifaili andmed.txt.
Taavi Mia Karl Sirli 314
fail = open("andmed.txt") andmed = fail.readlines() print(andmed) fail.close()
Ekraanile väljastatakse: ['Taavi\n', 'Mia\n', 'Karl\n', 'Sirli\n', '314']
Nagu näeme, siis järjendis on elemendid sõne kujul, kus viimane element on \n, mis tähistab realõppu. Tuleb meeles hoida, et elemente töödeldes realõpumärk eemaldada.
Järjendi ja funktsiooni video
Enesekontroll