Sunteți pe pagina 1din 21

12/2/23, 4:07 PM Curs 7 - Liste | UNSTPB-Elearning

Curs 7 - Liste

Platforma E-Learning - Universitatea Națională de Știință și Printed by: George-David DRĂGHICI


Site:
Tehnologie Politehnica București Date: Saturday, 2 December 2023, 4:07 PM
08-Transp-L-A1-S1: Programarea calculatoarelor și limbaje de
Course:
programare (Seria A - 2023)
Book: Curs 7 - Liste

https://curs.upb.ro/2023/mod/book/tool/print/index.php?id=73185 1/21
12/2/23, 4:07 PM Curs 7 - Liste | UNSTPB-Elearning

Description

https://curs.upb.ro/2023/mod/book/tool/print/index.php?id=73185 2/21
12/2/23, 4:07 PM Curs 7 - Liste | UNSTPB-Elearning

Table of contents

1. Operații de bază cu liste

2. Operații avansate cu liste


2.1. Definirea unei liste - accesul la elementele acesteia
2.2. Listele sunt editabile
2.3. Listele sunt obiecte
2.4. Tehnici avansate de slicing (feliere) pentru modificarea unei liste
2.5. Crearea unei liste de numere folosind funcția range()
2.6. Parcurgerea unei liste sau iterarea printr-o listă
2.7. Observații despre sintaxă
2.8. Operațiuni matematice cu liste
2.9. Test de apartenenţă
2.10. Copierea unei liste
2.11. Aplicația practică numărul 1 la copierea listelor
2.12. Aplicația practică numărul 2 la copierea listelor

https://curs.upb.ro/2023/mod/book/tool/print/index.php?id=73185 3/21
12/2/23, 4:07 PM Curs 7 - Liste | UNSTPB-Elearning

1. Operații de bază cu liste

Șirurile pe care le-am discutat în subiectul anterior au fost un prim exemplu de date compozite. Așa se numesc structurilor de date care sunt
folosite pentru a grupa seturi de valori într-un mod structurat. Veți învăța să utilizați și alte tipuri de date compozite, precum liste, tuple și
dicționare. Acum vom discuta despre liste.

În Python, o listă poate fi definită ca o colecție de elemente separate între ele prin virgulă, întregul fiind cuprins între paranteze drepte.
Exemplu:

În acest exemplu, valoarea variabilei zi este o listă.

După cum se poate observa, elementele individuale care alcătuiesc o listă pot fi de diferite tipuri. În acest exemplu, într-adevăr, primele trei
elemente sunt șiruri de caractere, al patrulea element este un număr întreg, al cincilea un număr real și așa mai departe. (vom vedea mai târziu
că un element al unei liste poate fi el însuși o listă!). În acest sens, conceptul de listă este deci destul de diferit de conceptul de „tablou
(matrice)” sau „variabilă indexată” pe care îl întâlnim în alte limbaje de programare.

De asemenea, rețineți că, la fel ca șirurile de caractere, listele sunt secvențe, adică colecții ordonate de obiecte. Diferitele elemente care alcătuiesc
o listă sunt, de fapt, întotdeauna aranjate în aceeași ordine și, prin urmare, putem accesa fiecare dintre ele individual dacă îi știm indicele din
listă. Așa cum a fost deja cazul caracterelor dintr-un șir, trebuie totuși amintit că numerotarea acestor indici începe de la zero și nu de la unu.

Exemple:

Spre deosebire de șiruri de caractere, care sunt un tip de date imuabil (care nu poate fi modificat), în liste este posibil să se schimbe elementele
individuale ale acesteia:

Prin urmare, putem înlocui anumite elemente ale unei liste cu altele, după cum urmează:

Funcția încorporată len(), pe care am văzut-o deja la șiruri, se aplică și listelor. Ea returnează numărul de elemente prezente în listă:

O altă funcție încorporată vă permite să eliminați orice element dintr-o listă (pornind de la indexul acestuia). Este vorba de funcția del():

https://curs.upb.ro/2023/mod/book/tool/print/index.php?id=73185 4/21
12/2/23, 4:07 PM Curs 7 - Liste | UNSTPB-Elearning

De asemenea, este foarte posibil să adăugați un element la o listă, dar pentru a face acest lucru, este necesar să luați în considerare că lista este
un obiect, motiv pentru care vom folosi una dintre metode. Conceptele informatice de obiect și metodă vor fi explicate mai târziu în capitolul
referitor la clase de obiecte și metode, dar acum putem arăta „cum funcționează” în cazul particular al unei liste:

În prima linie a exemplului de mai sus, am aplicat metoda append() obiectului zi, cu argumentul 'Sâmbătă'. Cum știm că „append” înseamnă „a
adăuga” în engleză, putem înțelege că metoda append() este un fel de funcție care este într-un fel atașată sau integrată în obiecte de tip „listă”.
Argumentul pe care îl folosim cu această funcție este, desigur, elementul pe care dorim să-l adăugăm la sfârșitul listei.

Vom vedea mai târziu că există o serie întreagă de metode (adică funcții integrate, sau mai degrabă „încapsulate” în obiecte de tip „listă”). Să
remarcăm că aplicăm o metodă unui obiect prin conectarea celor două cu un punct. Mai întâi numele variabilei care face referire la obiect,
apoi punctul, apoi numele metodei, aceasta din urmă întotdeauna însoțită de o pereche de paranteze.

Acum știm destule despre liste pentru a putea începe să le folosim în programele noastre. De exemplu, analizați scriptul de mai jos și comentați
cum funcționează:

A 5-a linie a acestui exemplu folosește operatorul „modulo” deja întâlnit anterior și care poate fi de mare ajutor în programare. Este reprezentat
de % în multe limbaje (inclusiv Python). Care este operația efectuată de acest operator?

Rezultate în urma executării scriptului:

https://curs.upb.ro/2023/mod/book/tool/print/index.php?id=73185 5/21
12/2/23, 4:07 PM Curs 7 - Liste | UNSTPB-Elearning

2. Operații avansate cu liste

Operații avansate cu liste

Listele sunt colecții ordonate de obiecte. La fel ca șirurile de caractere, listele fac parte dintr-un tip general numit secvențe în Python. Asemenea
caracterelor dintr-un șir, obiectele plasate într-o listă sunt accesibile printr-un index (un număr care indică locația obiectului în secvență).

https://curs.upb.ro/2023/mod/book/tool/print/index.php?id=73185 6/21
12/2/23, 4:07 PM Curs 7 - Liste | UNSTPB-Elearning

2.1. Definirea unei liste - accesul la elementele acesteia

Știți deja că o listă este delimitată folosind paranteze drepte:

În ultima linie de mai sus, am pus împreună un număr întreg, un șir, un real și chiar o listă, pentru a vă aminti că puteți combina date de orice
tip într-o listă, inclusiv liste, dicționare și tuple (acestea vor fi studiate mai târziu). ).

Pentru a accesa elementele unei liste, folosim aceleași metode, indexare, slicing (decupare în felii) folosite și pentru a accesa caracterele unui șir:

Exemplele de mai sus ar trebui să vă atragă atenția asupra faptului că o felie tăiată dintr-o listă este totuși o listă (chiar dacă este o felie care
conține doar un element, ca în al treilea exemplu), în timp ce un element izolat poate conține orice tip de date. Vom explora această distincție în
continuare în următoarele exemple.

https://curs.upb.ro/2023/mod/book/tool/print/index.php?id=73185 7/21
12/2/23, 4:07 PM Curs 7 - Liste | UNSTPB-Elearning

2.2. Listele sunt editabile

Spre deosebire de șiruri, listele sunt secvențe editabile. Acest lucru ne va permite să construim liste mari, bucată cu bucată, într-un mod dinamic
(adică folosind un algoritm oarecare). Exemple:

În exemplul de mai sus, am înlocuit primul element al listei numere, folosind operatorul [ ] (operatorul de indexare) la stânga semnului egal.

Dacă doriți să accesați un element care face parte dintr-o listă, el însuși situat într-o altă listă, trebuie doar să indicați cei doi indici între
paranteze drepte succesive:

https://curs.upb.ro/2023/mod/book/tool/print/index.php?id=73185 8/21
12/2/23, 4:07 PM Curs 7 - Liste | UNSTPB-Elearning

2.3. Listele sunt obiecte

În Python, listele sunt în totalitate obiecte și, prin urmare, le puteți aplica un anumit număr de metode deosebit de eficiente. Iată câteva:

În plus față de aceste metode, mai aveți instrucțiunea încorporată del, care vă permite să ștergeți unul sau mai multe elemente pornind de la
indicii lor:

Observați diferența dintre metoda remove() și instrucțiunea del: del lucrează cu un index sau o porțiune de index, în timp ce remove() caută o
valoare (dacă mai multe elemente ale listei au aceeași valoare, doar primul element este șters) .

https://curs.upb.ro/2023/mod/book/tool/print/index.php?id=73185 9/21
12/2/23, 4:07 PM Curs 7 - Liste | UNSTPB-Elearning

2.4. Tehnici avansate de slicing (feliere) pentru modificarea unei liste

După cum am menționat, puteți adăuga sau elimina elemente dintr-o listă folosind o instrucțiune del și o metodă append() încorporate. Dacă
ați înțeles bine principiul „felierii”/slicing, puteți obține totuși aceleași rezultate folosind numai operator []. Utilizarea acestui operator este puțin
mai dificilă decât utilizarea instrucțiunilor sau metodelor dedicate, dar permite mai multă flexibilitate:

Inserarea unuia sau mai multor elemente oriunde într-o listă

Pentru a utiliza această tehnică, trebuie să țineți cont de următoarele particularități:

• Dacă utilizați operatorul [] la stânga semnului egal pentru a efectua o inserare sau ștergere a unui element(e) într-o listă, trebuie să indicați în
mod obligatoriu o „felie” în lista țintă (adică doi indici uniți prin simbolul : ), și nu un element izolat din această listă.

• Elementul pe care îl furnizați în dreapta semnului egal trebuie să fie el însuși o listă. Dacă inserați un singur element, trebuie, prin urmare, să îl
încadrați între paranteze drepte pentru a-l transforma mai întâi într-o listă cu un singur element. Rețineți că elementul cuvinte[l] nu este o listă
(este șirul 'brânză'), în timp ce elementul cuvinte[l:3] este o listă.

Veți înțelege mai bine aceste constrângeri analizând următoarele:

Ștergerea/înlocuirea elementelor

• În prima linie a acestui exemplu, înlocuim felia [2:5] cu o listă goală, care corespunde unei ștergeri.

• În a patra linie, înlocuim o felie cu un singur element. Rețineți din nou că acest element trebuie să fie „prezentat” ca o listă.

• La linia 7, înlocuim o felie de două elemente cu una care are trei.

https://curs.upb.ro/2023/mod/book/tool/print/index.php?id=73185 10/21
12/2/23, 4:07 PM Curs 7 - Liste | UNSTPB-Elearning

2.5. Crearea unei liste de numere folosind funcția range()

Dacă trebuie să manipulați secvențe de numere, le puteți crea foarte ușor folosind această funcție încorporată. Aceasta returnează o secvență
de numere întregi pe care le puteți utiliza direct, sau le puteți converti într-o listă cu funcția list() sau într-o tuplă cu funcția tuple() (tuplele vor
fi descrise puțin mai târziu):

Funcția range() generează implicit o secvență de numere întregi cu valori crescătoare și care diferă cu o unitate. Dacă apelați range() cu un
singur argument, lista va conține un număr de valori egal cu argumentul furnizat, dar începând de la zero (adică range generează numerele
de la 0 la n-l). Rețineți că argumentul furnizat nu este niciodată în lista generată.

De asemenea, puteți utiliza range() cu două sau chiar trei argumente separate prin virgule, pentru a genera secvențe de numere mai specifice:

Dacă vi se pare dificil de înțeles exemplul de mai sus, luați în considerare că range() așteaptă întotdeauna unul până la trei argumente, care ar
putea fi etichetate ca FROM, TO și STEP. FROM este prima valoare care trebuie generată, TO este ultima (sau mai degrabă ultima + una), iar
STEP „pasul” pentru a sări de la o valoare la alta. Dacă nu sunt furnizați, parametrii FROM și STEP își iau valorile implicite, care sunt 0 și respectiv
1.

Argumentele negative sunt permise:

https://curs.upb.ro/2023/mod/book/tool/print/index.php?id=73185 11/21
12/2/23, 4:07 PM Curs 7 - Liste | UNSTPB-Elearning

2.6. Parcurgerea unei liste sau iterarea printr-o listă

Parcurgerea unei liste sau iterarea printr-o listă folosind for, range() și len()

Instrucțiunea for este instrucțiunea ideală pentru iterarea unei liste:

Dacă doriți să iterați pe un interval de numere întregi, funcția range() este obligatorie:

Este foarte convenabil să combinați funcțiile range() și len() pentru a obține automat toți indicii unei secvențe (listă sau șir). Exemplu:

Rularea acestui script dă rezultatul:

https://curs.upb.ro/2023/mod/book/tool/print/index.php?id=73185 12/21
12/2/23, 4:07 PM Curs 7 - Liste | UNSTPB-Elearning

https://curs.upb.ro/2023/mod/book/tool/print/index.php?id=73185 13/21
12/2/23, 4:07 PM Curs 7 - Liste | UNSTPB-Elearning

2.7. Observații despre sintaxă

O mică notă despre sintaxă

Remarcați cum a fost scrisă lista fabula de mai înainte. Python vă permite să „extindeți” o instrucțiune lungă pe mai multe rânduri, atunci când
continuați să scrieți cod care este delimitat de o pereche de paranteze, paranteze pătrate sau acolade. Puteți trata expresiile între paranteze în
acest fel, sau chiar definiția listelor lungi, a tuplelor mari sau a dicționarelor mari (vezi mai departe). Nivelul de indentare nu contează:
interpretorul detectează sfârșitul instrucțiunii acolo unde se închide perechea parantezei.

Această caracteristică vă permite să îmbunătățiți lizibilitatea programelor.

O consecință importantă a caracterului dinamic de definire a tipului de date

Instrucțiunea for ... in ...: este un exemplu de instrucțiune compusă. Nu uitați de cele două puncte obligatorii de la sfârșitul rândului și de
indentarea pentru blocul de instrucțiuni care urmează.

Numele care urmează cuvântului rezervat in este cel al secvenței care urmează să fie procesată. Numele care urmează cuvântului rezervat for
este cel pe care îl alegeți pentru variabila menită să conțină succesiv toate elementele secvenței. Această variabilă este definită automat (adică
nu este nevoie să o definiți în prealabil), iar tipul ei este adaptat automat la cel al elementului din secvența care este procesată (rețineți că, într-
adevăr, în cazul unei liste, elementele nu sunt toate neapărat de acelaşi tip).

Exemplu:

În exemplul de mai sus, folosim funcția încorporată type() pentru a arăta că variabila item își schimbă efectiv tipul la fiecare iterație (acest lucru
este posibil datorită caracterului dinamic de definire a tipului variabilelor în Python).

https://curs.upb.ro/2023/mod/book/tool/print/index.php?id=73185 14/21
12/2/23, 4:07 PM Curs 7 - Liste | UNSTPB-Elearning

2.8. Operațiuni matematice cu liste

Operatorii + (concatenare) și * (înmulțire) pot fi aplicați listelor:

Operatorul * este deosebit de util pentru a crea o listă de n elemente identice:

De exemplu, să presupunem că doriți să creați o listă B care conține același număr de elemente ca o altă listă A. Puteți obține acest rezultat în
moduri diferite, dar unul dintre cele mai simple ar fi să faceți: B = [0] *len(A)

https://curs.upb.ro/2023/mod/book/tool/print/index.php?id=73185 15/21
12/2/23, 4:07 PM Curs 7 - Liste | UNSTPB-Elearning

2.9. Test de apartenenţă

Puteți determina cu ușurință dacă un element face parte dintr-o listă folosind instrucțiunea in (această instrucțiune puternică poate fi folosită cu
toate secvențele):

https://curs.upb.ro/2023/mod/book/tool/print/index.php?id=73185 16/21
12/2/23, 4:07 PM Curs 7 - Liste | UNSTPB-Elearning

2.10. Copierea unei liste

Să presupunem că aveți o listă cu cuvintele unui proverb pe care doriți să o copiați într-o nouă variabilă pe care o veți numi fraza. Prima idee
care vă va veni în minte va fi cu siguranță să scrieți o atribuire simplă, cum ar fi:

>>> fraza = proverb

Procedând astfel, rețineți că nu creați o copie adevărată. Ca urmare a acestei instrucțiuni, există încă doar o singură listă în memoria
calculatorului. Ceea ce ați creat este numai o nouă referință la această listă. Încercați de exemplu:

Dacă variabila fraza ar conține o copie reală a listei, această copie ar fi independentă de original și, prin urmare, nu ar trebui să poată fi
modificată printr-o instrucțiune precum cea din linia a treia, care se aplică variabilei proverb. Puteți încă experimenta cu alte modificări, fie la
conținutul din proverb, fie la conținutul din fraza. În ambele cazuri, veți descoperi că schimbările dintr-unul se reflectă în celălalt și invers.

De fapt, numele proverb și fraza se referă ambele la unul și același obiect din memorie. Pentru a descrie această situație, informaticienii vor
spune că numele fraza este un alias al numelui proverb.

Vom vedea mai târziu utilitatea alias-urilor. Deocamdată, dorim să avem o tehnică pentru a face o copie fidelă a unei liste. Cu noțiunile
prezentate anterior, ar trebui să o puteți găsi de unul singur. Dacă nu ați reușit, mai jos sunt prezentate două tehnici pentru copierea listelor.

Să presupunem că doriți să faceți o copie a listei lista1 în lista2, deci lista1 și lista2 vor face referire la două liste separate, dar identice.

Prima modalitate de a face acest lucru este cu o buclă care copiază fiecare element al listei lista1 în lista2. Iată un exemplu:

lista1 = [ 'Buturuga', 'mică', 'răstoarnă', 'carul', 'mare'] # Creați o listă cu valori,

lista2 = [] # Creați o listă goală.

for item in lista1:

lista2.append(item) # Copiați elementele din lista1 în lista2.

print(lista1) #Afișați lista1

print(lista2) ) #Afișați lista2

După ce se execută codul, lista1 și lista2 vor face referire la două liste separate, dar identice.

A doua modalitate, mai simplă și mai elegantă de a realiza aceeași sarcină este utilizarea operatorului de concatenare, așa cum se arată aici:

lista1 = [ 'Buturuga', 'mică', 'răstoarnă', 'carul', 'mare'] # Creați o listă cu valori,

lista2 = [] + lista1 # Creați o copie a listei1.

https://curs.upb.ro/2023/mod/book/tool/print/index.php?id=73185 17/21
12/2/23, 4:07 PM Curs 7 - Liste | UNSTPB-Elearning
Ultima instrucțiune concatenează o listă goală cu lista1 și atribuie lista rezultată la lista2.

Ca rezultat, lista1 și lista2 vor face referire la două liste separate, dar identice.

https://curs.upb.ro/2023/mod/book/tool/print/index.php?id=73185 18/21
12/2/23, 4:07 PM Curs 7 - Liste | UNSTPB-Elearning

2.11. Aplicația practică numărul 1 la copierea listelor

Luați în considerare următoarele liste:

t1 = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

t2 = ['Ianuarie','Februarie','Martie','Aprilie','Mai','Iunie', 'Iulie','August','Septembrie','Octombrie','Noiembrie','Decembrie']

Scrieți codul care inserează în a doua listă toate elementele primei liste, astfel încât numele fiecărei luni să fie urmat de numărul corespunzător
de zile ['Ianuarie', 31, 'Februarie', 28, 'Martie', 31 etc.] .

https://curs.upb.ro/2023/mod/book/tool/print/index.php?id=73185 19/21
12/2/23, 4:07 PM Curs 7 - Liste | UNSTPB-Elearning

2.12. Aplicația practică numărul 2 la copierea listelor

Un număr este prim dacă este divizibil doar cu unul și cu el însuși. Scrieți un program care afișează toate numerele prime între 1 și 1000,
folosind metoda ciurul lui Eratostene.

[În continuare aveți explicația algoritmului pentru aflarea numerelor prime între 1 și 100:

Se scrie şirul numerelor naturale de la 2 până la 100, ordonate crescător, sub forma unei liste. Se taie din acest şir toţi multiplii numerelor prime,
astfel:

• numărul 2 este prim, vom tăia deci din acest şir toţi multiplii lui 2;

• 3 este număr prim, deci vom tăia şi toţi multiplii lui 3;

• tot aşa vom proceda şi cu 5;

• apoi va urma 7;

• următorul număr prim este 11; însă, deoarece 7 x 7 = 49, este mai mic decât 100 şi
11 x 11 = 121, este mai mare decât 100, toate numerele care au rămas în listă după procesul descris mai sus sunt numere prime;

Multiplii lui 2: 4, 6, 8,10,12,14,16,18, 20,... 100 .


Multiplii lui 3: 6, 9,12,15,18, 21, 24, 27,... 99 .
Multiplii lui 5:10,15, 20, 25, 30, 35, 40, 45,... 100 .
Multiplii lui 7:14, 21, 28, 35, 42, 49, 56, 63, 70, 77, 84, 91, 98

• După ce eliminăm multiplii de 2, 3, 5 şi 7, mai rămân: 2, 3, 5, 7,11,13,17,

19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, adică exact lista numerelor prime de la 2 până la 100.]

♦ Creați o listă de 1000 de elemente, fiecare inițializat la valoarea 1.

♦ Parcurgeți această listă pornind de la elementul cu indice 2: dacă elementul analizat are valoarea 1, setați la zero toate celelalte elemente ale
listei, ai căror indici sunt multipli întregi ai indicelui la care vă aflați.

Când ați parcurs astfel întreaga listă, indicii elementelor care vor fi rămas la 1 vor fi numerele prime căutate.

Într-adevăr: Din indicele 2, anulați toate elementele cu indici pari: 4, 6, 8, 10 etc. Cu indexul 3, anulați elementele cu indici 6, 9, 12, 15 etc. și așa
mai departe. Doar elementele ai căror indici sunt de fapt numere prime vor rămâne la 1.

https://curs.upb.ro/2023/mod/book/tool/print/index.php?id=73185 20/21
12/2/23, 4:07 PM Curs 7 - Liste | UNSTPB-Elearning

https://curs.upb.ro/2023/mod/book/tool/print/index.php?id=73185 21/21

S-ar putea să vă placă și