RAD SA LISTAMA
U prošloj lekciji smo u primerima imali liste definisane u samom
programu. Međutim, u praksi se elementi liste unose standardnim ulazom sa
tastature ili čitanjem iz fajla. Na početku se, kao i za promenljivu,
inicijalizuje početna vrednost, najčešće prazna lista.
L = [ ]
Između uglastih zagrada nema razmaka.
Često se koristi petlja za prolazak kroz svaku vrednost
u listi. Ako je L lista, komanda
for x in L: «telo petlje»
radi sledeće: prvo x dobija
vrednost prvog elementa iz liste L, i izvršava se telo: onda u sledećem krugu x
predstavlja drugu vrednost u L, i izvršava se telo; takav postupak se nastavlja
za sve članove L
Dodavanje i brisanje
elemenata
U mnogim programskim
jezicima, veličina niza je fiksna, te se navodi prilikom njegovog kreiranja, pa
ako se preračunate, završićete sa mnogo neiskorišćenog prostora ili sa
elementima koje ne možete smestiti u niz. Ako koristite indeks veći od
postojećeg, program javlja grešku prekoračenja.
Liste u Pythonu nisu fiksne
veličine, već rastu i smanjuju se po potrebi, prilikom dodavanja, odnosno
brisanja elemenata. Za dodavanje elemenata, koristićemo funkcije append,
za dodavanje na kraj, odnosno insert, za umetanje elementa na određenu
poziciju u nizu. Da bi se napravilo mesta za element koji se ubacuje u niz, svi
elementi koji su desno od novog elementa se "pomere" za jedno mesto u
desno. Za brisanje bilo kog od elemenata, tu je naredba del.
pocetnaLista = [14, 8, 7, 12,
11]
# Dodamo element na kraj
pocetnaLista.append(999)
print('Nakon dodavanja na
kraj:', pocetnaLista)
Nakon dodavanja na kraj: [14,
8, 7, 12, 11, 999]
# Umetnemo element na
poziciju 2
pocetnaLista.insert(2, 100)
print('Nakon umetanja na
poziciju 2:', pocetnaLista)
Nakon umetanja na poziciju 2:
[14, 8, 100, 7, 12, 11, 999]
# Obrišimo ono što smo
dodali:
del pocetnaLista[-1] #
Element na kraju
del pocetnaLista[2] # Element na poziciji 2
Ovde ne možemo preterati sa indeksima: Ako je
indeks prevelik, element se dodaje na kraj. Ako je indeks previše mali, element
se dodaje na početak, npr:
pocetnaLista.insert(200, 'ja
sam na kraju')
pocetnaLista.insert(-50, 'ja
sam na pocetku')
Nakon umetanja: ['ja
sam na pocetku', 14, 8, 7, 12, 11, 'ja sam na kraju']
Segmentacija liste
Zvanični termin za ovu
operaciju je slice. Operacija je jednostavna - iz liste iseći određeni deo. Kad
će mi to trebati? Pa recimo:
Zanima vas ekstenzija fajla -
odsečete poslednja tri karaktera.
Zanima vas godina nečijeg
rođenja, a imate njegov matični broj - odsečete sve od petog do osmog karaktera
Zanima vas 5 najboljih i 5
najgorih rezultata na Olimpijadi
I još mnogo toga
Slično indeksiranju, koristi
se operator [ ], ali ovaj put ne navodimo jedan broj, već dva, koje
predstavljaju granice onog što želimo da isečemo, a odvojene sa dvotačkom ( :
). Važno je za napomenuti, sečenje uzima sve elemente počevši od prvog, do
ali ne uključujući poslednjeg. Za razliku od indeksiranja, rezultat sečenja
je uvek lista, koja u zavisnosti od granica sečenja može biti prazna, imati
jedan ili više elemenata.
pocetnaLista = [14, 8, 7, 12,
11]
print('Prva tri elementa',
pocetnaLista[0:3])
Prva tri elementa [14, 8, 7]
print('Svi elementi osim
poslednjeg', pocetnaLista[0:-1])
Svi elementi osim poslednjeg
[14, 8, 7, 12]
# Iako je rezultat samo jedan
element, sečenje vraća niz!
print('Samo prvi element',
pocetnaLista[0:1])
Samo prvi element [14]
# Ili nekad prazan
print('Nepostojeći isečak',
pocetnaLista[100:120])
Nepostojeći isečak []
S obzirom da često želimo
prvih nekoliko ili poslednjih nekoliko elemenata, postoji nekoliko skraćenica:
Ako se izostavi prva granica,
podrazumeva se da je nula
Ako se izostavi poslednja
granica, podrazumeva se da je jednaka dužini niza (ovo se radi da bi bio
obuhvaćen i poslednji element)
Ako se izostave obe granice,
vraća se kopija liste
pocetnaLista = [14, 8, 7, 12,
11]
print('Prva dva elementa',
pocetnaLista[:2])
Prva dva elementa [14, 8]
print('Poslednja dva
elementa', pocetnaLista[-2:])
Poslednja dva elementa [12,
11]
Postoji više ugrađenih
funkcija koje rade sa listama. Ovde prikazujemo neke od najkorisnijih:
len Računa
dužinu liste (broj podataka u listi)
sum Računa sumu
podataka u listi
min Nalazi
najmanji podatak u listi
max Nalazi najveći
podatak u listi
Na primer, sledeća naredba
izračunava srednju vrednost brojeva iz liste L:
average = sum(L)/len(L)
append(x) Dodaje podatak
x na kraj liste
sort() Sortira listu
count(x) Vraća broj
pojavljivanja podatka x u listi
index(x) Vraća
poziciju prvog pojavljivanja podatka x u listi
reverse() Invertuje
listu (obrće redosled podataka u listi)
remove(x) Ukljanja (briše)
prvo pojavljivanje podatka x u listi
insert(p,x) Ubacuje
podatak x na poziciju p u listi
Primer 1:
Napišite program koji
generiše listu L od 50 slučajnih brojeva između 1 i 100.
from random import randint
L = [ ]
for i in range(50):
L.append(randint(1,100))
Iz Excela se sećamo funkcije
randint koja generiše slučajne brojeve. Ovde takođe postoji, samo je pozivamo
iz biblioteke random.
Koristili smo funkciju append
za dodavanje podataka u praznu listu, [].
Primer 2:
Zamenite svaki podatak iz
liste L sa njegovim kvadratom.
for i in range(len(L)):
L[i] = L[i]**2
Primer 3:
Prebrojte koliko podataka iz
liste L je veće od 50.
brojac = 0
for pod in L:
if pod>50:
brojac = brojac+1
Primer 4:
Iz datog niza brojeva
izdvojiti parne i upisati u drugu listu
rez = [ ]
for x in L:
if x %2== 0:
rez.append(x)
Primer 5:
Napiši program koji učitava
broj ocena učenika, a zatim i pojedinačne ocene (svaku u posebnom redu) i na
kraju određuje i ispisuje prosečnu ocenu tog učenika.
Elemente u listu možemo
učitati tako što na početku krenemo od prazne liste (liste [ ]), a zatim u
petlji učitavamo jedan po jedan element i dodajemo ga u listu funkcijom append.
broj_ocena =
int(input("Unesi broj ocena:"))
ocene = [ ]
for i in range(broj_ocena):
ocena = int(input("Unesi
ocenu:"))
ocene.append(ocena)
prosek = sum(ocene) /
len(ocene)
print("Prosek:",
prosek)
Zadaci za vežbu:
Ako je lista zadata naredbom
a=[9,5,2,7,4,6], šta će biti rezultati izraza:
1. len(a)
2. min(a)
3. del(a[4])
4. del(a[:4])
5. a.append(3)
6. Može li lista podataka
biti prazna? Ako može, kako se kreira?
Нема коментара:
Постави коментар