Programiranje

Lekcija 8: Kolekcije podataka – Liste i Tuple-ovi

Ovaj članak sadrži ažuriranu listu od 10 najboljih besplatnih AI alata za 2025. godinu, uključujući ChatGPT, Grammarly, Notion AI, Canva, Google Gemini, Runway i druge. Namenjen je korisnicima iz Srbije, Crne Gore, Bosne i Hercegovine, Severne Makedonije i Slovenije. Optimizovan je za SEO, GEO i LEO pretrage, sa fokusom na pristupačnost, funkcionalnost bez plaćanja i konkretne primene u obrazovanju, radu i svakodnevici. Alati su dostupni putem web pregledača i ne zahtevaju tehničko znanje. Tekst uključuje FAQ i korisne savete za početnike.

Odlično napredujete! Do sada ste radili sa pojedinačnim podacima (brojevi, tekst) i naučili ste kako da ih obrađujete i koristite u uslovima i petljama. Ali šta ako želite da sačuvate više srodnih podataka zajedno? Na primer, listu kupovina, imena studenata, ili brojeve telefona?

Za to nam služe kolekcije podataka. U Pythonu postoji nekoliko ugrađenih kolekcija, a u ovoj lekciji ćemo se fokusirati na dve najčešće i najvažnije za početnike: Liste (Lists) i Tuple-ove (Tuples).

1. Liste (Lists): Dinamičke kolekcije

Lista je najsvestranija i najčešće korišćena kolekcija u Pythonu. Zamislite je kao uređenu listu stvari, gde svaka stvar ima svoj redni broj (indeks).

Ključne karakteristike lista:

  • Uređene su: Elementi imaju fiksni redosled i pristupate im putem indeksa.
  • Promenljive su (Mutable): Možete dodavati, uklanjati ili menjati elemente nakon što je lista kreirana.
  • Dozvoljavaju duplikate: Isti element može se pojaviti više puta u listi.
  • Mogu sadržati različite tipove podataka (brojeve, tekst, logičke vrednosti, pa čak i druge liste!).

Kreiranje lista

Liste se kreiraju pomoću uglastih zagrada [], sa elementima razdvojenim zarezima.

# Prazna lista
prazna_lista = []

# Lista brojeva
brojevi = [1, 2, 3, 4, 5]

# Lista stringova
voce = [„jabuka“, „banana“, „pomorandza“, „kivi“]

# Lista sa mešanim tipovima podataka
mesana_lista = [„Tekst“, 123, True, 3.14]

# Lista unutar liste (ugnežđena lista)
matrica = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

print(f“Brojevi: {brojevi}“)
print(f“Voće: {voce}“)
print(f“Mešana lista: {mesana_lista}“)

 

Pristupanje elementima liste (Indeksiranje)

Elementima liste pristupamo pomoću njihovog indeksa. U Pythonu, indeksiranje uvek počinje od 0!

  • Prvi element ima indeks 0.
  • Drugi element ima indeks 1, i tako dalje.

Možete koristiti i negativne indekse:

  • -1 se odnosi na poslednji element.
  • -2 na pretposlednji, itd.

moj_spisak = [„Laptop“, „Miš“, „Tastatura“, „Monitor“]

# Pristupanje pojedinačnim elementima
print(f“Prvi element: {moj_spisak[0]}“)  # Ispisuje „Laptop“
print(f“Drugi element: {moj_spisak[1]}“) # Ispisuje „Miš“
print(f“Poslednji element: {moj_spisak[-1]}“) # Ispisuje „Monitor“
print(f“Pretposlednji element: {moj_spisak[-2]}“) # Ispisuje „Tastatura“

Menjanje elemenata liste

Pošto su liste promenljive, lako možete promeniti vrednost nekog elementa koristeći njegov indeks.

boje = [„crvena“, „plava“, „zelena“]
print(f“Originalne boje: {boje}“)

boje[1] = „žuta“ # Menjamo drugi element (indeks 1)
print(f“Promenjene boje: {boje}“) # Ispisuje [‘crvena’, ‘žuta’, ‘zelena’]

Dodavanje elemenata u listu

Postoji nekoliko načina za dodavanje elemenata:

  • .append(element): Dodaje element na kraj liste.
  • .insert(indeks, element): Dodaje element na specifičan indeks.
  • .extend(druga_lista): Dodaje sve elemente druge liste na kraj trenutne liste.

automobili = [„BMW“, „Mercedes“]
print(f“Početni automobili: {automobili}“)

automobili.append(„Audi“) # Dodaje „Audi“ na kraj
print(f“Posle append: {automobili}“) # Ispisuje [‘BMW’, ‘Mercedes’, ‘Audi’]

automobili.insert(1, „Fiat“) # Dodaje „Fiat“ na indeks 1
print(f“Posle insert: {automobili}“) # Ispisuje [‘BMW’, ‘Fiat’, ‘Mercedes’, ‘Audi’]

novi_modeli = [„Tesla“, „Renault“]
automobili.extend(novi_modeli) # Dodaje elemente iz nove_modele
print(f“Posle extend: {automobili}“) # Ispisuje [‘BMW’, ‘Fiat’, ‘Mercedes’, ‘Audi’, ‘Tesla’, ‘Renault’]

Uklanjanje elemenata iz liste

  • .remove(vrednost): Uklanja prvo pojavljivanje navedene vrednosti.
  • .pop(indeks): Uklanja element na specifičnom indeksu i vraća ga. Ako ne navedete indeks, uklanja poslednji element.
  • del lista[indeks]: Uklanja element na specifičnom indeksu.
  • del lista[pocetak:kraj]: Uklanja raspon elemenata (slicing).
  • .clear(): Uklanja sve elemente iz liste.

proizvodi = [„Hleb“, „Mleko“, „Jaja“, „Hleb“, „Sir“]
print(f“Početni proizvodi: {proizvodi}“)

proizvodi.remove(„Hleb“) # Uklanja prvo „Hleb“
print(f“Posle remove(‘Hleb’): {proizvodi}“) # Ispisuje [‘Mleko’, ‘Jaja’, ‘Hleb’, ‘Sir’]

uklonjen_element = proizvodi.pop(0) # Uklanja element na indeksu 0 („Mleko“)
print(f“Posle pop(0): {proizvodi}, Uklonjen: {uklonjen_element}“) # Ispisuje [‘Jaja’, ‘Hleb’, ‘Sir’], Uklonjen: Mleko

del proizvodi[1] # Uklanja element na indeksu 1 („Hleb“)
print(f“Posle del proizvodi[1]: {proizvodi}“) # Ispisuje [‘Jaja’, ‘Sir’]

# proizvodi.clear() # Uklanja sve elemente
# print(f“Posle clear(): {proizvodi}“) # Ispisuje []

Slicing (Sečenje) liste

Slicing vam omogućava da izvučete pod-sekcije liste. Sintaksa je lista[pocetak:kraj:korak]. Krajnji indeks nije uključen.

brojevi = [10, 20, 30, 40, 50, 60, 70, 80, 90]

# Od indeksa 2 do kraja
segment1 = brojevi[2:] # [30, 40, 50, 60, 70, 80, 90]
print(f“Segment 1 (od indeksa 2 do kraja): {segment1}“)

# Od početka do indeksa 5 (bez 5)
segment2 = brojevi[:5] # [10, 20, 30, 40, 50]
print(f“Segment 2 (od početka do indeksa 5): {segment2}“)

# Od indeksa 2 do 6 (bez 6)
segment3 = brojevi[2:6] # [30, 40, 50, 60]
print(f“Segment 3 (od indeksa 2 do 6): {segment3}“)

# Cela lista sa korakom 2
segment4 = brojevi[::2] # [10, 30, 50, 70, 90]
print(f“Segment 4 (cela lista sa korakom 2): {segment4}“)

# Kopiranje liste (važno!)
kopija_liste = brojevi[:] # Kreira pravu kopiju, a ne samo referencu

 

Korisne metode i funkcije za liste

  • len(lista): Vraća broj elemenata u listi.
  • .sort(): Sortira listu (modifikuje originalnu listu).
  • sorted(lista): Vraća novu sortiranu listu (ne menja originalnu).
  • .reverse(): Obrće redosled elemenata u listi (modifikuje originalnu listu).
  • .count(element): Vraća koliko puta se element pojavljuje u listi.

brojevi_za_sortiranje = [3, 1, 4, 1, 5, 9, 2]
print(f“Originalna lista: {brojevi_za_sortiranje}“)

brojevi_za_sortiranje.sort() # Sortira listu
print(f“Sortirana lista: {brojevi_za_sortiranje}“)

imena = [„Boris“, „Ana“, „Stefan“]
imena.reverse() # Obrće redosled
print(f“Obrnuta lista imena: {imena}“)

pojavljivanja = [1, 2, 2, 3, 2, 4]
broj_dvojki = pojavljivanja.count(2)
print(f“Broj 2 se pojavljuje {broj_dvojki} puta.“)

duzina_liste = len(voce)
print(f“Dužina liste voća: {duzina_liste}“)

 

2. Tuple-ovi (Tuples): Nepromenljive kolekcije

Tuple (tuple) je sličan listi, ali sa jednom ključnom razlikom: nepromenljiv je (Immutable). To znači da, kada jednom kreirate tuple, ne možete dodavati, uklanjati ili menjati njegove elemente.

Ključne karakteristike tuple-ova:

  • Uređeni su: Elementi imaju fiksni redosled i pristupate im putem indeksa.
  • Nepromenljivi su (Immutable): Nije ih moguće menjati nakon kreiranja.
  • Dozvoljavaju duplikate: Isti element može se pojaviti više puta.
  • Mogu sadržati različite tipove podataka.

Kreiranje tuple-ova

Tuple-ovi se kreiraju pomoću običnih zagrada (), sa elementima razdvojenim zarezima.

# Prazan tuple
prazan_tuple = ()

# Tuple brojeva
koordinate = (10, 20)

# Tuple stringova
dani_nedelje = („ponedeljak“, „utorak“, „sreda“)

# Tuple sa mešanim tipovima
profil = („Jelena“, 28, True)

# Tuple sa samo jednim elementom (važno: morate staviti zarez!)
jedan_element_tuple = („jedan“,)
# ovo_nije_tuple = („jedan“) # Ovo bi bio samo string unutar zagrada!

print(f“Koordinate: {koordinate}“)
print(f“Dani nedelje: {dani_nedelje}“)
print(f“Profil: {profil}“)

 

Pristupanje elementima tuple-a (Indeksiranje)

Pristupa se isto kao listama, pomoću indeksa koji počinju od 0.

moja_tacka = (5, 10, 15)
print(f“X koordinata: {moja_tacka[0]}“) # Ispisuje 5
print(f“Z koordinata: {moja_tacka[2]}“) # Ispisuje 15

 

Zašto koristiti tuple-ove umesto lista?

  • Sigurnost podataka: Ako imate podatke za koje znate da se nikada ne bi trebalo menjati, tuple osigurava tu nepromenljivost.
  • Performanse: Tuple-ovi su nešto brži od lista za iteraciju i manje zauzimaju memorije.
  • Kao ključevi u rečnicima: Tuple-ovi se mogu koristiti kao ključevi u rečnicima (što liste ne mogu).

Konverzija između lista i tuple-ova

Možete lako konvertovati liste u tuple-ove i obrnuto.

lista_u_tuple = [1, 2, 3]
konvertovan_tuple = tuple(lista_u_tuple)
print(f“Lista u tuple: {konvertovan_tuple}“) # Ispisuje (1, 2, 3)

tuple_u_listu = („a“, „b“, „c“)
konvertovana_lista = list(tuple_u_listu)
print(f“Tuple u listu: {konvertovana_lista}“) # Ispisuje [‘a’, ‘b’, ‘c’]

 

Praktičan primer: Jednostavna lista zadataka (To-Do List)

Hajde da napravimo program koji će omogućiti korisniku da dodaje i pregleda stavke na listi zadataka. Koristićemo sve što smo naučili do sada.

# Jednostavna To-Do Lista

lista_zadataka = [] # Prazna lista za čuvanje zadataka

print(„Dobrodošli u vašu To-Do Listu!“)

while True: # Beskonačna petlja koja će se prekinuti sa ‘break’
    print(„\nOdaberite opciju:“)
    print(„1. Dodaj zadatak“)
    print(„2. Prikaži sve zadatke“)
    print(„3. Obriši zadatak“)
    print(„4. Izlaz“)

    izbor = input(„Unesite broj opcije: „)

    if izbor == ‘1’:
        zadatak = input(„Unesite novi zadatak: „)
        lista_zadataka.append(zadatak)
        print(f“‘{zadatak}’ je dodat na listu.“)
    elif izbor == ‘2’:
        if not lista_zadataka: # Proverava da li je lista prazna
            print(„Lista zadataka je prazna.“)
        else:
            print(„\n— VAŠI ZADACI —„)
            for i, zadatak in enumerate(lista_zadataka): # enumerate daje i indeks i element
                print(f“{i + 1}. {zadatak}“)
            print(„——————-„)
    elif izbor == ‘3’:
        if not lista_zadataka:
            print(„Lista zadataka je prazna, nema šta za brisanje.“)
        else:
            print(„\n— ZADACI ZA BRISANJE —„)
            for i, zadatak in enumerate(lista_zadataka):
                print(f“{i + 1}. {zadatak}“)
            print(„————————-„)
            try:
                indeks_za_brisanje = int(input(„Unesite redni broj zadatka za brisanje: „)) – 1 # -1 jer indeksi počinju od 0
                if 0 <= indeks_za_brisanje < len(lista_zadataka):
                    obrisan_zadatak = lista_zadataka.pop(indeks_za_brisanje)
                    print(f“Zadatak ‘{obrisan_zadatak}’ je obrisan.“)
                else:
                    print(„Nevalidan redni broj.“)
            except ValueError:
                print(„Molimo unesite validan broj.“)
            except IndexError: # Iako je gornja provera pokriva, ovo je dodatna sigurnost
                print(„Nevalidan redni broj.“)
    elif izbor == ‘4’:
        print(„Izlazim iz programa. Doviđenja!“)
        break # Prekidamo ‘while’ petlju i izlazimo iz programa
    else:
        print(„Nevalidna opcija. Molimo pokušajte ponovo.“)

 

Pitanja i odgovori (FAQ)

P: Koja je glavna razlika između lista i tuple-ova?

O: Glavna razlika je u promenljivosti: liste su promenljive (mutable), što znači da se mogu menjati (dodavati, brisati, menjati elementi) nakon kreiranja, dok su tuple-ovi nepromenljivi (immutable), što znači da se njihov sadržaj ne može menjati nakon kreiranja.

P: Kako se zove prvi element u listi ili tuple-u?

O: Prvi element uvek ima indeks 0.

P: Šta se dešava ako pokušam da pristupim indeksu koji ne postoji u listi?

O: Dobićete IndexError. Na primer, ako lista ima 3 elementa (indeksi 0, 1, 2) i pokušate da pristupite lista[3], dobićete grešku.

P: Mogu li liste da sadrže različite tipove podataka?

O: Da, liste mogu sadržati mešavinu različitih tipova podataka (npr. brojeve, stringove, logičke vrednosti, pa čak i druge liste).

P: Kada bih koristio tuple umesto liste?

O: Koristili biste tuple kada imate skup srodnih podataka koji ne bi trebalo da se menjaju tokom izvršavanja programa (npr. koordinate tačke, RGB vrednosti boje). Takođe, tuple-ovi su nešto performantniji za male skupove podataka i mogu se koristiti kao ključevi u rečnicima.

Relevantni linkovi

Čestitamo! Sada znate kako da koristite liste i tuple-ove za organizovanje podataka u svojim programima. Ovo je ogroman korak ka pisanju kompleksnijih i funkcionalnijih aplikacija. U sledećoj lekciji ćemo istražiti još jednu važnu kolekciju: rečnike i skupove, koje će vam omogućiti još fleksibilnije načine skladištenja podataka!

Lekcija 9 – Kolekcije podataka u Pythonu: Liste i Tuple-ovi
Lekcija 9: Kolekcije podataka – Liste i Tuple-ovi u Python programiranju

Nebojsa Kostić

Rođen 1976. Bavim se računarima I it poslovima više od 20 godina..Osnivač TechFokusa i tehnološki novinar sa preko 20 godina iskustva. Specijalizovan je za hardver, retro računare i tržišne analize.

Nebojsa Kostić has 454 posts and counting. See all posts by Nebojsa Kostić

Оставите одговор

Ваша адреса е-поште неће бити објављена. Неопходна поља су означена *