$$ \newcommand{\floor}[1]{\left\lfloor{#1}\right\rfloor} \newcommand{\ceil}[1]{\left\lceil{#1}\right\rceil} \renewcommand{\mod}{\,\mathrm{mod}\,} \renewcommand{\div}{\,\mathrm{div}\,} \newcommand{\metar}{\,\mathrm{m}} \newcommand{\cm}{\,\mathrm{cm}} \newcommand{\dm}{\,\mathrm{dm}} \newcommand{\litar}{\,\mathrm{l}} \newcommand{\km}{\,\mathrm{km}} \newcommand{\s}{\,\mathrm{s}} \newcommand{\h}{\,\mathrm{h}} \newcommand{\minut}{\,\mathrm{min}} \newcommand{\kmh}{\,\mathrm{\frac{km}{h}}} \newcommand{\ms}{\,\mathrm{\frac{m}{s}}} \newcommand{\mss}{\,\mathrm{\frac{m}{s^2}}} \newcommand{\mmin}{\,\mathrm{\frac{m}{min}}} \newcommand{\smin}{\,\mathrm{\frac{s}{min}}} $$

Prijavi problem


Obeleži sve kategorije koje odgovaraju problemu

Još detalja - opišite nam problem


Uspešno ste prijavili problem!
Status problema i sve dodatne informacije možete pratiti klikom na link.
Nažalost nismo trenutno u mogućnosti da obradimo vaš zahtev.
Molimo vas da pokušate kasnije.

Liste

Od kolekcija smo do sada pomenuli torku i opseg, a videli smo da i string može da se koristi kao kolekcija. Još jedna veoma važna i često korišćena vrsta kolekcija je lista.

Liste i torke

Liste, kao i torke, mogu da se zadaju nabrajanjem elemenata, uz razliku da se elementi liste pišu između uglastih zagrada:

Liste su po mnogo čemu slične torkama. Sve što smo od osobina torki pomenuli u poglavlju o kolekcijama, važi i za liste:

  • Lista se takođe može smestiti u promenljivu i obrnuto - elementi liste se mogu dodeliti odgovarajućem broju promenljivih (drugim rečima, lista se može spakovati i raspakovati)

  • elementima liste se može pristupiti pomoću imena liste i rednog broja (indeksa) elementa napisanog u uglastim zagradama

  • dužina liste se dobija funkcijom len

Liste imaju i neke osobine koje ih razlikuju od torki. Na primer, liste se mogu produžavati pomoću funkcije append:

Takođe, elementi liste mogu da menjaju svoje vrednosti i mogu da se izbacuju iz liste:

Ovakve operacije sa torkama nisu moguće. Jednom napravljena torka ostaje takva dok postoji. Torka kao vrednost ne može da se modifikuje - ne može menjati svoju dužinu niti vrednosti pojedinih elemenata. Promenljiva koja sadrži torku može samo da dobije celu novu torku kao vrednost, ali time prethodna torka nije modifikovana, nego je prestala da postoji. Zato za torke kažemo da su nepromenljive (imutabilne).

Torke možemo da koristimo za kolekcije podataka koje ne nameravamo da menjamo tokom izvršavanja programa (mada ih možemo menjati ručno pre izvršavanja programa). Upotrebom torki obezbeđujemo da se podaci neće promeniti slučajno, a i program će raditi nešto efikasnije sa torkom nego što bi radio sa listom.

U toku rada programa torka t se može konvertovati u listu a i obrnuto: a = list(t) odnosno t = tuple(a), ali ovakve konverzije su veoma retko potrebne i bolje ih je izbegavati (ako se često primenjuju na velikim kolekcijama, ovakve konverzije mogu značajno da uspore program).

Formiranje liste

Kao što smo već videli, liste možemo jednostavno i efikasno da postepeno gradimo u programu. Na primer, ako je data torka brojeva iz koje želimo da u listu prebacimo one koji su veći od nule (da bismo sa njima nastavili da računamo), to možemo da uradimo ovako:

Na početku imamo praznu listu, a onda u petlji koristimo funkciju append da bismo dodali u listu elemente koje želimo.

Učitavanje liste

Na potpuno isti način možemo da formiramo listu od podataka koji se učitavaju:

Drugi način da učitamo listu je da prvo formiramo listu potrebne dužine, a onda da u petlji učitane vrednosti dodeljujemo direktno elementima liste.

Koristili smo naredbu a = [0] * n kojom se formira lista od n elemenata. Operacija [0] * n se naziva umnožavanje (multipliciranje) liste. Rezultat umnožavanja liste je n nadovezanih datih listi. Na primer [0] * 5 je lista [0, 0, 0, 0, 0], a [2, 7] * 3 je lista [2, 7, 2, 7, 2, 7].

Ako korisnik unosi sve elemente liste u jednom redu razdvojene razmacima, program pišemo ovako:

Za rastavljanje unetog teksta na kraće stringove koji sadrže pojedinačne brojeve upotrebili smo funkciju split().

Funkcija split():

Parametar funkcije split() je znak ili tekst koji želimo da koristimo kao razdvajač (separator). Ako ne navedemo separator, podrazumeva se razmak.

"1234 56".split() -> ["1234", "56"]

"1234,56".split(',') -> ["1234", "56"]

Rezultat funkcije split() je lista stringova. Broj kraćih stringova koje ćemo kao rezultat dobiti, zavisi od broja i rasporeda znakova - razdvajača u polaznom stringu. Na primer, ako tekst sadrži samo jedan znak za razdvajanje negde u sredini, dobićemo dva kraća stringa. Svaki novi znak za razdvajanje može proizvesti string više u rezultatu (ako zaista odvaja neki deo polaznog stringa od ostatka teksta).

"1;23;456;7".split(';') -> ["1", "23", "456", "7"]

" 1  234    56 7 ".split() -> ["1", "234", "56", "7"]

Primeri i zadaci

Primer - prodaje

Na početku skripte su date vrednosti nekoliko prodaja u jednoj prodavnici. Izdvojiti u listu prodaje koje su po vrednosti veće od 1000, a manje ili jednake 4000, a zatim ih ispisati.

Zadatak rešavamo ovako:

Primer - Nagle promene

Data je torka brojeva. Izdvojiti u listu brojeve koji se od svojih prethodnika razlikuju bar za 10, a zatim ih ispisati.

Jedno moguće rešenje je:

Zadatak - parni brojevi

Data je torka brojeva. Izdvojiti u listu brojeve koji su parni, a zatim ih ispisati.

Podsetimo se, broj x je paran ako je \(x \% 2 == 0\)

Zadatak - svaka treća reč

Data je torka stringova. Izdvojiti u listu stringove čiji indeksi su deljivi sa 3, a zatim ih ispisati.

Zadatak - ispod nule

Data je torka brojeva. Izdvojiti u listu brojeve koji su negativni, a njihovi prethodnici pozitivni, a zatim ispisati izdvojene brojeve.