python

Listat

Listat dhe krijimi i tyre

Nëse na duhet të grupojmë të dhëna të llojeve të ndryshme, do të na duhet një lloj tjetër e dhëne që kryen këtë detyrë. Pra, një e dhënë që mban të dhëna të llojeve të ndryshme. Vargjet e karaktereve ashtu siç edhe i pamë në kapitullin e mëparshëm, janë struktura homogjene, listat janë heterogjene.

Listat janë koleksione vlerash të renditura të ndryshueshme.

Këto vlera quhen elemente dhe mund të jenë të llojeve të ndryshme. Listat mund të indeksohen, mund të veçohen disa elemente të tyre, mund të bashkohen përmes operatorit +, të përsëriten përmes operatorit * njësoj si vargjet e karaktereve. Ndryshe nga këto të fundit që janë homogjene, listat janë heterogjene. Elemenetet dhe madhësia e listave janë të ndryshueshme.

Sintaksa për krijimin e listave është

[elementet e listës të ndarë nga njëri tjetri me prejse]

Shembull:

>>> kengetari = ['serj', 'tankian', 1967]

Lista jonë kengetari, është një listë heterogjene: përmban dy vargje dhe një numër.

Indeksimi, ndarja në pjesë dhe matricat

Njësoj si stringjet edhe listat mund të indeksohen dhe të veçohen disa elemente. Numërimi fillon nga zero.

>>> lista = ['vargjet', 'listat']
>>> lista[1]
'listat'
>>> muzike = ['pop', 'r&b', 'rock', 'soul']
>>>muzike[1:2]
'r&b'
>>> muzike[-1]
'soul'

Matricat janë paraqitje e të dhënave në tabelë. Për të shëtitur në elementet e tabelës nevojiten dy indekse, njëri për rreshtin dhe tjetri për shtyllën.

Shembull: Të krijojmë një matricë me përmasa 3x3.

>>> matrica = [
    [1,2,3],
    [4,5,6],
    [7,8,9]
]
>>> matrica[0][2]  # rreshti i pare elementi i trete
3
>>> matrica[2][1]  # rreshti i trete elementi i dyte
8

Shtimi i elementeve të listës

Gjatë punës me listat na nevojitet të shtojmë elemente të rinj. Meqenëse listat janë të ndryshueshme, ato modifikohen pa qenë nevoja të krijohet një listë e re.

Një mënyrë për shtimin e elemente në një listë është përdorimi i operatorit të bashkimit +.

Shembull: Listës tonë me ane të operatorit + do t'i shtojmë një listë të re. Lista që kemi krijuar përmban vargje, numra si edhe një listë me vargje.

>>> x = ['abc', 123, ['liste', 'tjeter']]
>>> x + ['d','ef']
['abc', 123, ['liste', 'tjeter'], 'd', 'ef']

Duhet të kemi parasysh se nuk mund të bashkojmë sekuenca të llojeve të ndryshme, kështu p.sh nuk mund të bashkojmë një listë me një varg. Perndryshe mund të marrim gabim sintakse. Me parë duhet të kujdesemi që t'i kthejme ty dyja sekuencat të një lloji.

Shembull:

>>> str([1, 2, 3]) + 'abc'
'[1, 2, 3]abc'

Të dhënat i kemi kthyer në varg me anë të funksionit të gatshëm të pythonit str(). Ky funksion kthen listën tonë me numra në një varg. Në këtë rast bashkimi është i mundur. Tani do të perdorim funksionin list(), i cili kthen të dhënat ( kryesisht vargjet) në listë.

>>> list('123') + [4,5,6]
['1', '2', '3', 4, 5, 6]

Një tjetër mënyrë për të shtuar elemente në një listë është përdorimi i metodave:

Metoda append() merr një argument që mund të jetë i çdo lloji dhe i shton elementet në fund të listës. Metoda extend() është e ngjashme me metoden append(), por ndryshon nga argumenti që merr: merr vetëm listë. Metoda insert() shton vetëm një argument në listë para indeksit që ne përcaktojmë.

>>> fjale = ['libra', 'kompjuter']
>>> fjale.append('muzike')
>>> fjale
['libra', 'kompjuter', 'muzike']
>>> fjale.extend(['programimi', 'python'])
>>> fjale
['libra', 'kompjuter', 'muzike', 'programimi', 'python']
>>> fjale.insert(2, 'gjuha shqipe')
>>> fjale
['libra', 'kompjuter', 'gjuha shqipe', 'muzike', 'programimi ne python']

Lista jonë quhet fjale dhe përmban fjalët: libra dhe kompjuter. Me metoden append() ne kemi shtuar një fjalë të re në fund të kësaj liste. Kjo metodë, ashtu siç e thamë edhe me lart merr argumenta të çdo lloji, ne rastin tonë ka një varg. Më pas ne i shtuam listës sonë dy fjalë të tjera duke përdorur metoden extend(). Kjo metode, ndryshe nga metoda append(), merr si argument vetëm listë. Po të provoni të jepni si argument një varg do të shikoni se kjo metodë do ta kthejë atë në liste duke ndarë në karaktere më vete çdo gërmë të vargut.

Ne fund listës i shtuam edhe vargun 'gjuha shqipe', të cilin e vendosëm në pozicionin me indeks 2 të listës ekzistuese.

Heqja e elementeve të listës

Kur flasim për shtim elementesh në një listë, menjëherë mendojme se duhet të këtë menyra edhe për t'i fshirë këta elemente ose edhe vetë listën.

Metodat janë:

Komanda del bën të mundur gjithashtu heqjen e elementeve të listës.

Metoda remove() heq atë element nga lista që ne ia kalojmë si argument. Metoda pop() heq elementin e fundit të listës dhe na e kthen atë. Komanda del fshin një element sipas indeksit ose edhe të gjithë listën.

>>> fjale = ['lule', 'qiell', 'stine', 'toke']
>>> fjale.remove('stine')
>>> fjale
['lule', 'qiell', 'toke']
>>> fjale.pop()
'toke'
>>> fjale
['lule', 'qiell']
>>> del fjale[1]
>>> fjale
['lule']
>>> del fjale  # fshin listën nga memoria

Veprimet me listat

Bashkimi me operatorin +

Listat ashtu si edhe vargjet mund të bashkohen mes tyre, nëpërmjet operatorit të bashkimit +.

>>> l1 = ['elementi i pare', 'elementi i dyte']
>>> L2 = ['ELEMENTI I PARE', 'ELEMENTI I DYTE']
>>> l1+L2
['elementi i pare', 'elementi i dyte', 'ELEMENTI I PARE','ELEMENTI I DYTE']

Gjithashtu mund të krijojmë një listë të re duke i hedhur vlerën përmes bashkimit të një liste ekzistuese me një listë të re:

>>> L = l1 + ['elemente']
>>> L
['elementi i pare', 'elementi i dyte', 'elemente']

Nuk mund të bashkojmë një listë me një varg. Pra duhet të jenë sekuenca të një lloji siç është shpjeguar lart në "Shtimi i elementeve të listës".

Përsëritja me operatorin *

Njësoj si tek vargjet edhe tek listat, përsëritja realizohet me operatorin *.

>>> ['PROGRAM'] * 2
['PROGRAM', 'PROGRAM']

Përfaqësimi me operatorin in dhe not in

Me anë të operatorit të perfaqesimit ne mund të kërkojmë nëse një element është pjesë e listës. Rezultati që marrim nga kjo "pyetje" që ne i bëjmë pythonit është dy llojesh: i vërtetë ose i gabuar.

>>> fjale = ['listat', 'fjaloret', 'vargjet']
>>> 'fjaloret' in fjale
True
>>> 'element' in fjale
False

Në shembullin e parë kemi kerkuar për elementin 'fjaloret' në listën fjale. Ky element ndodhet në listë kështu që python jep si rezultat e vërtetë. Shembulli tjetër kërkon për elementin 'element' në listën fjale. Ky element nuk i përket kësaj liste dhe pythoni jep pergjigje e gabuar.

Operatori not in bën mohimin e kërkimit, pra shtron një pyetje të tillë: x element nuk ndodhet në listë? Nëse x nuk ndodhet pergjigja është e vërtetë, nëse elementi x ndodhet në listë pergjigja është gabuar.

>>> fjale = ['listat', 'fjaloret', 'vargjet']
>>> 'element' not in fjale
True
>>> 'listat' not in fjale
False

Modifikimi i listave

Modifikimi i listave, bën ndryshime të elementeve pa krijuar një listë të re siç ndodhte me vargjet e shenjave. Listat mund të ndryshohen me indeksim dhe me ndarje në pjesë. Për të bërë këto ndryshime ne hedhim vlerat në indeksin ose grupet e indeksuara.

>>> l = ['funksion', 'lista', 'varg']
>>> l[1] = 'program'
>>> l
['funksion', 'program', 'varg']
>>> l[0:2] = ['python', 'modul', 'metode']
>>> l
['python', 'modul', 'metode', 'varg']

Funksionet e gatshme të pythonit për listat

Në lidhje me listat pythoni ka disa funksione të gatshme. Ndër to mund të përmendim:

Funksioni len, i përdorur gjatë librit në shembujt e dhënë, jep si rezultat numrin e elementeve që përmban një listë.

>>> emra = ['Guido von Rossum', ['Mark Lutz', 'pitonista']]
>>> len(emra)
2

Numri i elementeve të listës sonë emra është dy pasi elementi i dytë është vetë një listë, pavarsisht numrit të elementeve që përmban kjo listë.

Funksioni max jep si rezulat vlerën më të madhe në një listë.

>>> lista = ['fjale', 'televizion', 'pc']
>>> max(lista)
'televizion'

Kur elementet e listës janë vargje si në shembullin e mësipërm, krahasimi bëhet sipas renditjes alfabetike.

Funksioni min jep si rezultat vlerën minimale në një listë.

>>> lista = ['fjale', 'televizion', 'pc']
>>> min(lista)
'pc'

Funksioni list kthen një sekuencë tjetër ( deri tani nga sekuencat e tjera ne kemi mësuar vargjet) në një listë.

>>> varg = '123'
>>> list(varg)
['1', '2', '3']

Metodat e gatshme të pythonit për listat

Deri tani ne kemi shpjeguar disa metoda që perdoren për listat si:

Në tabelën e mëposhtme shpjegohen shkurtimisht këto dhe disa metoda të tjera

Metoda Shpjegimi
append(x) Shton një element në fund të listës
extend(sekuence) Shton përmbajtjen e sekuencës në listë, të gjithë elementet një nga një
insert(indeksi, e dhëna) Vendos të dhënat në listë para indeksit të përcaktuar
pop(i) Heq elementin sipas indeksit dhe e kthen atë si shprehje; nëse nuk përcaktohet indeksi heq elementin e fundit
remove(x) Heq elementin e parë nga lista me vlerën x
count(x) Tregon sa herë shfaqet një element në listë
sort() Rendit të dhënat e listës
reverse() Kthen mbrapsht si renditje të dhënat e listës
index(elementi) Jep indeksin me të vogel ne listë, ne të cilin shfaqet elementi i kërkuar

Shembull:

>>> x = ['a', 'ab', 'aaa', 'a']
>>> x.count('a')
2
>>> x.sort()
>>> x
['a', 'a', 'aaa', 'ab']
>>> x.reverse()
>>> x
['ab', 'aaa', 'a', 'a']
>>> x.index('a')
2

Strukturat e të dhënave Stack dhe Queue

Me listat ne mund të krijojmë struktura të dhënash siç janë pirgjet dhe radhët.

Pirgjet ( angl. stack) janë struktura të dhënash të cilat mund t'i imagjinojme si një pirg me libra të vendosura njëri mbi tjetrin vertikalisht. Nëse kemi një vendosje të tillë të librave e kemi më të lehte të vendosim në fund ( thënë ndryshe në majë) të pirgut, një libër të ri, sesa në fillim pasi kështu do të na duhej të zhvendosnim të gjithë librat një për një. Kuptohet që edhe kur duam të heqim një libër do të fillojme nga fundi. Për këtë arsye pirgjet njihen si struktura LIFO( angl. Last In, First Out) që nga anglishtja do të përkthehej: i fundit që shtohet është ai që del i pari. Metodat që përdoren për pirgjet janë append() dhe pop(). Të dyja këto metoda përkatësisht shtojnë dhe heqin elemente në fund të listës.

>>> stack = ['elementi i pare', 'elementi i dyte']
>>> stack.append('elementi i trete')
>>> stack
['elementi i pare','elementi i dyte', 'elementi i trete']
>>> stack.pop()
'elementi i trete'
>>> stack
['elementi i pare','elementi i dyte']
>>> stack.pop()
'elementi i dyte'
>>> stack
['elementi i pare']

Siç e shikojmë elementi që shtohet i fundit është ai që del i pari.

Radhët (angl. queue) janë struktura të dhënash që mund t'i imagjinojmë si radhë njerëzish në një supermarket apo bankë. Personi që vjen i pari shërbehet i pari. Kjo arsye bën që radhet njihen si FIFO ( angl. First In, First Out) që nga anglishtja do të përkthehej: i pari që futet është i pari që del nga lista. Me këtë strukturë metodat tona append() dhe pop() do të na ngadalësonin. Për këtë arsye për të krijuar një radhë mund të perdorim collections.deque i cili na lejon të përdorim me lehtësi metodat append() dhe pop() si dhe appendleft() dhe popleft(). Dy metodat e fundit shtojnë dhe heqin elemente në fillim të listës, prandaj janë mjaft të përshtatshme për të pasur një strukturë që funksionon si rradhët përmes listave.

>>> from collections import deque
>>> queue = deque([4, 3, 2, 1])
>>> queue.appendleft(5)
>>> queue
deque[5, 4, 3, 2, 1]
>>> queue.popleft()
5
>>> queue
deque([4, 3, 2, 1])
>>> queue.pop()
1
>>> queue
deque([4, 3, 2])

Shtojmë në fund me append() dhe heqim me pop(). Shtojmë në fillim me appendleft() dhe heqim me popleft()