Indeks bira jednu poziciju. Slice bira uređeni deo.
U lekciji Liste naučili ste da svaki element ima poziciju. Indeksiranje vam omogućava da izaberete jednu od tih pozicija. Slicing vam omogućava da izaberete opseg pozicija i daje novu listu sa izabranim vrednostima. Zamislite: indeks → jedna pozicija → jedna vrednost; slice → opseg pozicija → nova lista.
numbers = [10, 20, 30, 40, 50]
print(numbers[2])Python broji pozicije liste od 0: numbers[0] je 10, numbers[1] je 20, a numbers[4] je 50. U numbers[2], 2 je pozicija, a ne vrednost koju želite. Pratite putanju: numbers → indeks 2 → vrednost 30.
30Pozitivni indeksi broje od početka. Negativni indeksi broje od kraja. Slice koristi start:stop:step: početna pozicija je uključena, ali krajnja granica nije uključena.
Korisna mapa: vrednosti: 10 20 30 40 50
pozitivni indeksi: 0 1 2 3 4
negativni indeksi: -5 -4 -3 -2 -1
numbers = [10, 20, 30, 40, 50]
print(numbers[-1])
print(numbers[-2])-1 bira poslednji element, pa ispisuje 50. -2 bira element pre poslednjeg, pa ispisuje 40. Zapamtite: -1 → poslednji element; -2 → jedan element pre poslednjeg.
numbers = [10, 20, 30, 40, 50]
print(numbers[2])
print(numbers[1:4])numbers[2] bira jednu poziciju i daje jednu vrednost: 30. numbers[1:4] bira uređeni opseg pozicija i daje novu listu: [20, 30, 40]. Indeksiranje služi za jedan element; slicing služi za izabrani deo liste.
numbers = [10, 20, 30, 40, 50]
print(numbers[1:4])numbers[1:4] čitajte kao „počnite od indeksa 1 i stanite pre indeksa 4“. Python uzima pozicije 1, 2 i 3, koje sadrže 20, 30 i 40. Ne uzima vrednost na indeksu 4. Tako je dužina slice-a predvidiva: 4 - 1 = 3 izabrana elementa.
numbers = [10, 20, 30, 40, 50]
print(numbers[:3])Bez početne granice, numbers[:3] počinje od prvog elementa i staje pre indeksa 3. Rezultat je [10, 20, 30].
numbers = [10, 20, 30, 40, 50]
print(numbers[2:])Bez krajnje granice, numbers[2:] počinje od indeksa 2 i nastavlja do kraja. Rezultat je [30, 40, 50]. Bez obe granice, numbers[:] bira celu listu i pravi novu listu sa svim njenim elementima.
numbers = [10, 20, 30, 40, 50]
print(numbers[::2])Tri dela slice-a su start:stop:step. Ovde su start i stop izostavljeni, pa Python koristi celu listu. Korak 2 uzima svaki drugi element: [10, 30, 50]. Korak 1 znači svaki element; korak 2 znači svaki drugi element.
numbers = [10, 20, 30]
# numbers[10] raises IndexError
print(numbers[:10])Indeksiranje traži jednu tačnu poziciju, zato numbers[10] izaziva IndexError kada ta pozicija ne postoji. Slice može bezbedno da pređe dostupne pozicije: numbers[:10] jednostavno uzima dostupne elemente i daje [10, 20, 30].
scores = [12, 24, 36, 48, 60]
print(scores[2])
print(scores[-1])
print(scores[1:4])
print(scores[:2])Pre pokretanja ovog koda predvidite četiri rezultata: vrednost na indeksu 2, poslednju vrednost, pozicije koje uključuje [1:4] i rezultat izraza [:2]. Izlazi su 36, 60, [24, 36, 48] i [12, 24]. Pratite pozicije i granice umesto da nagađate.
Česte početničke greške
- Tumačenje indeksa kao vrednostiZa
numbers = [10, 20, 30],numbers[1]ne traži broj1.1je pozicija, a izabrana vrednost je20. - Uključivanje krajnje pozicije
numbers[1:4]ne uključuje element na indeksu4. Neka pravilo bude jednostavno: početak je uključen; kraj nije uključen. - Pretpostavka da -1 znači prvi element
-1znači poslednji element. Negativni indeksi broje unazad od kraja liste. - Očekivanje da indeks i slice isto obrađuju nepostojeće pozicijeNedostajući indeks može izazvati
IndexError; slice koji prelazi kraj liste jednostavno koristi elemente koji postoje.
