Nizovi i liste u Pythonu — osnovno
U ovoj lekciji naučićeš kako da koristiš liste u Pythonu, kako da čuvaš više vrednosti i kako da ih obrađuješ pomoću petlji. Liste su osnovni tip podataka za rad sa kolekcijama i ključni su za mnoge algoritme.
U Pythonu se često koristi termin lista (engl. list) za strukturirano čuvanje više vrednosti u jednoj promenljivoj. Lista je dinamička kolekcija elemenata koji su poredjani i promenljivi — to znači da možeš da im pristupaš preko indeksa i da lako dodaješ, uklanjaš ili menjaš elemente.
Python lista može sadržati elemente različitih tipova: brojeve, tekst, logičke vrednosti, pa čak i druge liste ⟶ npr. [1, "Ana", True, [2, 3]].
To je jedna od glavnih prednosti lista — **fleksibilnost** pri čuvanju različitih tipova podataka. :contentReference[oaicite:0]{index=0}
S druge strane, kada govorimo o nizovima (engl. arrays), obično se misli na strukturu podataka koja sadrži elemente istog tipa — najčešće koristeći modul kao što je array ili popularnu biblioteku NumPy.
U takvim nizovima svi elementi moraju biti istog tipa, što omogućava efikasnije korišćenje memorije i brže matematičke operacije. :contentReference[oaicite:1]{index=1}
Ukratko, ključne razlike su:
- Tipovi podataka: Liste mogu sadržati različite tipove elemenata, dok nizovi obično zahtevaju da su svi elementi istog tipa. :contentReference[oaicite:2]{index=2}
- Modul i deklaracija: Liste su deo jezika i ne zahtevaju dodatne biblioteke, dok nizove obično krećeš pomoću modula kao što su
arrayiliNumPy. :contentReference[oaicite:3]{index=3} - Namena: Liste su vrlo fleksibilne i pogodne za generalnu upotrebu, dok se nizovi češće koriste u numeričkim i performansno zahtevnim aplikacijama. :contentReference[oaicite:4]{index=4}
Nakon ovog uvoda, posvetićemo se praktičnim primerima i operacijama nad listama, kao što su pristup elementima, iteracija, dodavanje i uklanjanje elemenata.
1. Kreiranje liste
Lista se definiše stavljanjem elemenata u uglaste zagrade:
brojevi = [1, 2, 3, 4, 5]
imena = ["Ana", "Marko", "Jovana"]
prazna_lista = []
2. Pristup elementima
Elementi liste se pristupaju pomoću indeksa (počinje od 0):
print(brojevi[0]) # ispisuje 1
print(imena[2]) # ispisuje "Jovana"
3. Iteracija kroz listu
Koristeći for petlju možemo proći kroz sve elemente:
for broj in brojevi:
print(broj)
4. Dodavanje i uklanjanje elemenata
Možemo dodavati ili uklanjati elemente sa liste:
brojevi.append(6) # dodaje 6 na kraj liste
brojevi.remove(3) # uklanja vrednost 3
poslednji = brojevi.pop() # uklanja i vraća poslednji element
5. Dodatne operacije
- Dužina liste:
len(brojevi) - Sortiranje:
brojevi.sort() - Provera prisustva:
if 4 in brojevi:
6. Mini zadaci
- Napravi listu omiljenih voćki i ispiši ih
- Ispiši sve elemente liste brojeva veće od 10
- Prebroj koliko puta se određeni broj pojavljuje u listi
- Napravite listu kvadrata brojeva od 1 do 10
Savladavanjem lista, moći ćeš da kombinuješ petlje i kolekcije, što je osnova za sve složenije projekte i algoritme.
Zadaci za vežbu: rad sa listama u Pythonu
Sledeći zadaci služe za uvežbavanje rada sa listama, petljama i osnovnim algoritamskim razmišljanjem. Zadaci su lake i srednje težine i često se pojavljuju u praksi i školskim primerima.
Zadatak 1: Brojanje elemenata većih od proseka
Zadatak:
Data je lista brojeva. Izračunati prosečnu vrednost elemenata liste i
prebrojati koliko elemenata je veće od tog proseka.
Algoritam
- Izračunaj zbir elemenata liste
- Odredi prosek
- Prođi ponovo kroz listu i broji elemente veće od proseka
Rešenje
brojevi = [4, 7, 2, 9, 5, 10]
zbir = sum(brojevi)
prosek = zbir / len(brojevi)
brojac = 0
for x in brojevi:
if x > prosek:
brojac += 1
print("Prosek:", prosek)
print("Broj elemenata većih od proseka:", brojac)
Dodatno objašnjenje:
Zadatak koristi dve prolazne petlje (jednu implicitno kroz sum),
što je često prihvatljivo za ovakve probleme.
Zadatak 2: Obrnuti redosled elemenata
Zadatak:
Napisati program koji kreira novu listu sa elementima u obrnutom redosledu.
Ne koristiti ugrađenu funkciju reverse().
Algoritam
- Kreiraj praznu listu
- Prolazi kroz originalnu listu unazad
- Dodaj elemente u novu listu
Rešenje
lista = [1, 2, 3, 4, 5]
obrnuta = []
for i in range(len(lista) - 1, -1, -1):
obrnuta.append(lista[i])
print(obrnuta)
Komentar:
Iako Python ima jednostavnija rešenja, ovaj zadatak razvija razumevanje
indeksa i rada sa petljama.
Zadatak 3: Izdvajanje jedinstvenih elemenata
Zadatak:
Iz date liste izdvoj elemente koji se pojavljuju samo jednom.
Algoritam
- Za svaki element proveri koliko puta se pojavljuje
- Ako se pojavljuje tačno jednom, dodaj ga u novu listu
Rešenje
lista = [1, 2, 2, 3, 4, 4, 5]
jedinstveni = []
for x in lista:
if lista.count(x) == 1:
jedinstveni.append(x)
print(jedinstveni)
Dodatno objašnjenje:
Metod count() je jednostavan, ali za veoma velike liste može biti spor.
U naprednijim primerima koristi se rečnik.
Zadatak 4: Provera da li je lista sortirana
Zadatak:
Proveriti da li su elementi liste sortirani u rastućem redosledu.
Algoritam
- Upoređuj svaki element sa sledećim
- Ako je neki veći od narednog — lista nije sortirana
Rešenje
lista = [1, 3, 5, 7, 9]
sortirana = True
for i in range(len(lista) - 1):
if lista[i] > lista[i + 1]:
sortirana = False
break
print("Lista je sortirana:", sortirana)
Dodatno objašnjenje:
Ovaj pristup je efikasan jer se prekida čim se pronađe greška.
Zadatak 5: Rotacija liste ulevo
Zadatak:
Rotirati listu ulevo za jedno mesto.
Primer: [1, 2, 3, 4] → [2, 3, 4, 1]
Algoritam
- Sačuvaj prvi element
- Pomeraj ostale elemente ulevo
- Prvi element smesti na kraj
Rešenje
lista = [1, 2, 3, 4]
prvi = lista[0]
for i in range(len(lista) - 1):
lista[i] = lista[i + 1]
lista[-1] = prvi
print(lista)
Dodatni komentar:
Rotacije su česte u algoritmima i strukturama podataka
i ovaj zadatak razvija razmišljanje o pomeranju elemenata.
Liste u Pythonu i pojam „nizova“
U programskim jezicima kao što su C, C++ ili Java, često se koristi pojam niz (array), koji predstavlja kolekciju elemenata istog tipa i unapred definisane veličine. Međutim, u Pythonu ne postoji klasičan niz u tom smislu.
U Pythonu se najčešće koristi struktura podataka koja se naziva lista (list). Liste se ponekad kolokvijalno nazivaju „nizovima“, ali to nije potpuno precizno, jer se Python liste ponašaju znatno fleksibilnije od klasičnih nizova u drugim jezicima.
Glavne razlike između Python lista i klasičnih nizova:
- Python liste su dinamičke – njihova veličina se može menjati tokom izvršavanja programa.
- Lista može sadržati elemente različitih tipova podataka.
- Ne postoji unapred rezervisana fiksna memorija kao kod statičkih nizova.
- Liste su mutabilne, što znači da se njihovi elementi mogu menjati.
Sledeći primer pokazuje da Python lista može sadržati različite tipove podataka, što kod klasičnih nizova nije dozvoljeno:
lista = [10, 3.14, "Python", True]
print(lista)
Zbog svega navedenog, ispravnije je u Pythonu koristiti termin lista, dok se pojam „niz“ može koristiti samo kao pojednostavljeno objašnjenje za početnike.
Ako je potrebna struktura sličnija klasičnom nizu (sa elementima istog tipa
i većom efikasnošću), Python nudi dodatne module, kao što su
array ili biblioteka NumPy.
Indeksiranje i segmenti (slice) u Python listama
Svaki element u Python listi ima svoj indeks. Indeksi počinju od 0, što znači da prvi element liste ima indeks 0, drugi indeks 1 itd.
imena = ["Ana", "Marko", "Jovana", "Nikola"]
print(imena[0]) # Ana
print(imena[2]) # Jovana
Python omogućava i korišćenje negativnih indeksa.
Indeks -1 označava poslednji element liste,
-2 pretposlednji itd.
print(imena[-1]) # Nikola
print(imena[-2]) # Jovana
Pored pojedinačnog pristupa elementima, Python omogućava izdvajanje
segmenta liste pomoću tzv. slice sintakse:
lista[pocetak:kraj].
Element sa indeksom pocetak je uključen, dok element sa
indeksom kraj nije uključen u segment.
brojevi = [0, 1, 2, 3, 4, 5, 6]
print(brojevi[1:4]) # [1, 2, 3]
print(brojevi[:3]) # [0, 1, 2]
print(brojevi[3:]) # [3, 4, 5, 6]
Segmentiranje se može koristiti i sa korakom, što omogućava preskakanje elemenata.
print(brojevi[::2]) # [0, 2, 4, 6]
print(brojevi[::-1]) # [6, 5, 4, 3, 2, 1, 0]
Posebno je važno istaći da segmentiranje liste vraća novu listu, a ne menja originalnu listu.
Naprednije metode nad listama i list comprehensions
Pored osnovnih operacija, Python liste podržavaju i brojne naprednije metode koje omogućavaju efikasan i čitljiv rad sa podacima. Ove metode često zamenjuju duže petlje i pojednostavljuju kod.
Najčešće korišćene metode nad listama
append(x)– dodaje element na kraj listeextend(iterable)– dodaje više elemenata iz druge kolekcijeinsert(i, x)– ubacuje element na zadatu pozicijuremove(x)– uklanja prvo pojavljivanje elementapop(i)– uklanja i vraća element sa pozicijeiindex(x)– vraća indeks prvog pojavljivanja elementacount(x)– broji pojavljivanja elementasort()– sortira listu (menja originalnu listu)reverse()– obrće redosled elemenata
brojevi = [5, 2, 9, 1, 5]
brojevi.append(7)
brojevi.insert(1, 10)
brojevi.remove(5)
print(brojevi)
Važno je napomenuti da metode sort() i reverse()
menjaju originalnu listu. Ako je potrebno sačuvati
originalni redosled, može se koristiti funkcija sorted().
original = [3, 1, 4, 2]
sortirana = sorted(original)
print(original) # [3, 1, 4, 2]
print(sortirana) # [1, 2, 3, 4]
List comprehensions
List comprehensions predstavljaju Python-ov
kratak i elegantan način za kreiranje lista na osnovu postojećih
kolekcija. Najčešće zamenjuju for petlje uz dodatne uslove.
Opšti oblik list comprehension izraza je:
nova_lista = [izraz for element in kolekcija]
Primer: formiranje liste kvadrata brojeva.
brojevi = [1, 2, 3, 4, 5]
kvadrati = [x * x for x in brojevi]
print(kvadrati)
List comprehensions mogu sadržati i uslov.
parni = [x for x in brojevi if x % 2 == 0]
print(parni)
U poređenju sa klasičnom for petljom, list comprehensions
proizvode kraći, čitljiviji i često efikasniji kod.
Ipak, kod složenijih logika preporučuje se korišćenje standardnih petlji radi bolje čitljivosti.
Mutabilnost i referenciranje Python lista
Python liste su mutabilne strukture podataka, što znači da se njihovi elementi mogu menjati i nakon što je lista kreirana. Ovo ponašanje je veoma važno razumeti, jer može dovesti do neočekivanih rezultata prilikom rada sa više promenljivih.
Kada se lista dodeli drugoj promenljivoj, ne pravi se nova lista, već obe promenljive referenciraju istu listu u memoriji.
lista1 = [1, 2, 3]
lista2 = lista1
lista2.append(4)
print(lista1)
print(lista2)
Iako se može očekivati da se promena odnosi samo na lista2,
obe promenljive pokazuju isti rezultat:
[1, 2, 3, 4]
[1, 2, 3, 4]
Razlog je taj što lista1 i lista2 referenciraju
isti objekat u memoriji.
Kopiranje liste
Ako je potrebno napraviti pravu kopiju liste, mora se eksplicitno kopirati njen sadržaj.
Primer korišćenja metode copy():
lista1 = [1, 2, 3]
lista2 = lista1.copy()
lista2.append(4)
print(lista1) # [1, 2, 3]
print(lista2) # [1, 2, 3, 4]
Alternativno, kopija liste može se napraviti i pomoću segmentiranja (slice):
lista2 = lista1[:]
U oba slučaja, lista1 i lista2 su nezavisne liste,
pa promene jedne ne utiču na drugu.
Razumevanje mutabilnosti i referenciranja je ključno za ispravno korišćenje Python lista i sprečavanje logičkih grešaka u programima.
Kada koristiti liste, a kada druge Python kolekcije
Python nudi više ugrađenih struktura podataka za rad sa kolekcijama. Iako se liste koriste veoma često, važno je znati kada su one pravi izbor, a kada je bolje koristiti neku drugu strukturu.
Liste (list)
Liste su uređene, mutabilne kolekcije koje mogu sadržati elemente različitih tipova. Koriste se kada je potrebno:
- menjati sadržaj kolekcije (dodavanje, brisanje, izmena elemenata),
- čuvati redosled elemenata,
- pristupati elementima preko indeksa.
brojevi = [1, 2, 3]
brojevi.append(4)
Tuple (tuple)
Tuple je sličan listi, ali je nepromenljiv (immutable). Jednom kreiran tuple ne može se menjati.
Tuple se koristi kada podaci ne treba da se menjaju, na primer:
- koordinate tačke,
- konstante vrednosti,
- povratne vrednosti funkcija.
tacka = (10, 20)
# tacka[0] = 5 # Greška – tuple je nepromenljiv
Set (set)
Set je neuređena kolekcija jedinstvenih elemenata. Ne dozvoljava duplikate i ne koristi indekse.
Set je koristan kada je potrebno:
- ukloniti duplikate iz kolekcije,
- brzo proveriti da li element postoji,
- raditi skupovne operacije (unija, presek, razlika).
brojevi = [1, 2, 2, 3, 3]
jedinstveni = set(brojevi)
print(jedinstveni)
Rečnik (dict)
Rečnik čuva podatke u obliku ključ–vrednost parova. Koristi se kada je važno brzo pronaći vrednost na osnovu nekog ključa.
student = {
"ime": "Ana",
"godine": 20,
"prosek": 9.5
}
print(student["ime"])
Kratko poređenje
- List – kada je potreban redosled i izmena elemenata
- Tuple – kada podaci ne treba da se menjaju
- Set – kada su važni jedinstveni elementi
- Dict – kada se podaci povezuju preko ključeva
Pravi izbor strukture podataka čini kod čitljivijim, efikasnijim i manje sklonim greškama.
Skriveni mini kviz — Python liste i kolekcije
Klikni da proveriš da li razumeš kako funkcionišu liste, indeksiranje, segmenti, mutabilnost i razlike između listi i drugih Python kolekcija.
Otvori kviz
Mini kviz: Liste u Pythonu
1. Šta će se ispisati?
lista = [10, 20, 30, 40]
print(lista[-1])
2. Koji je rezultat sledećeg segmentiranja?
brojevi = [0, 1, 2, 3, 4, 5]
print(brojevi[2:5])
3. Šta će se desiti u sledećem primeru?
a = [1, 2, 3]
b = a
b.append(4)
print(a)
4. Šta radi sledeći list comprehension?
rezultat = [x for x in range(10) if x % 2 == 0]
5. Koja struktura je NAJPOGODNIJA ako želiš da ukloniš duplikate iz liste?
Zadaci za samostalan rad – Python liste
Sledeći zadaci namenjeni su proveri razumevanja rada sa Python listama. Zadaci su podeljeni po težini i pogodni su za učenike 7. i 8. razreda, kao i za osnovni takmičarski nivo.
□ Osnovni zadaci
-
Napiši program koji kreira listu celih brojeva i ispisuje:
- prvi element liste,
- poslednji element liste,
- broj elemenata u listi.
-
Data je lista imena.
Ispiši sva imena jedno ispod drugog koristeći
forpetlju. - Data je lista brojeva. Izračunaj i ispiši zbir svih elemenata liste.
□ Srednji zadaci
- Data je lista brojeva. Napravi novu listu koja sadrži samo parne brojeve iz originalne liste.
- Napiši program koji proverava da li se dati broj nalazi u listi. Ako se nalazi, ispiši njegov indeks.
- Data je lista brojeva. Kreiraj novu listu koja sadrži kvadrate svih elemenata. (Zadatak se može rešiti i pomoću list comprehension.)
□ Teži zadaci (takmičarski nivo)
-
Data je lista celih brojeva.
Odredi najduži rastući uzastopni segment u listi.
Uputstvo: koristi promenljive koje pamte trenutnu dužinu segmenta i maksimalnu dužinu do sada. -
Data je lista brojeva.
Proveri da li lista predstavlja palindrom
(lista je ista kada se čita s leva i s desna).
Uputstvo: uporedi originalnu listu sa njenom obrnutom verzijom. -
Data je lista brojeva.
Formiraj novu listu tako da svaki element bude
razlika između susednih elemenata
originalne liste.
Uputstvo: koristi indekse i pazi na granice liste.
Savet: Pre nego što kreneš sa pisanjem koda, razmisli: da li je potrebno menjati listu, praviti novu listu ili koristiti dodatne promenljive.