Ce vei învăța astăzi?
După această lecție vei înțelege ce este o listă, care sunt caracteristicile ei și cum accesăm elementele unei liste, direct sau secvențial.
Ce este o listă?
Definiție: Lista este un model conceptual liniar de organizare a datelor, în care elementele sunt aranjate una după alta, în ordine, fiecare având o poziție bine stabilită.
Este ca un rând de elevi la ora de sport: fiecare elev are o poziție fixă în rând, iar ordinea nu se schimbă decât dacă noi o schimbăm.
Exemple de liste din viața reală
- Mașinile la semafor: sunt în ordinea sosirii, una după alta
- Catalogul elevilor: fiecare elev are un număr (poziție) în catalog
- Raftul de cărți: cărțile sunt așezate în ordine, fiecare la locul ei
- Lista de cumpărături: produsele sunt scrise unul sub altul
Caracteristicile unei liste
Orice listă are câteva caracteristici importante pe care le folosim mereu:
Elementele au o ordine fixă, respectată mereu
Fiecare element are o poziție (index), începând cu 0
Fiecare element are un precedent și un succesor
Prima și ultima poziție
Primul element se află la începutul listei, iar ultimul element se află la final. Pentru a ajunge la orice element, urmăm ordinea: de la primul, spre ultimul.
Acces direct versus acces secvențial
Accesul direct înseamnă că ajungem imediat la elementul dorit, după poziția lui, fără să parcurgem celelalte elemente.
Accesul secvențial înseamnă că parcurgem elementele unul câte unul, începând cu primul, până ajungem la cel căutat.
| Criteriu | Acces direct | Acces secvențial |
|---|---|---|
| Cum ajungem la element? | Direct, prin poziția (indexul) lui | Parcurgând elementele unul câte unul |
| Exemplu | v[4] ne dă al 5-lea element |
Verificăm fiecare element, începând cu v[0] |
| Când folosim? | Când știm poziția elementului | Când căutăm după valoare sau parcurgem totul |
Exemplu: lista cu 5 numere
v = [10, 20, 30, 40, 50] print(v) print(v[0]) print(v[4])
Observă: v[0] afișează primul element (10), iar v[4] afișează al cincilea element (50). Accesăm direct, după poziție!
Exercițiu de completare
Completează enunțul despre liste cu cuvintele potrivite:
O ______ este un model conceptual liniar de organizare a datelor. Elementele unei liste respectă o anumită ______ și pot fi accesate după poziția lor, numită ______. Primul element al unei liste are poziția (indexul) ______.
Bancă de cuvinte:
Test de înțelegere
Test rapid - lista:
1. Vrem să citim al 5-lea element dintr-o listă cu 100 de elemente. Ce este corect?
2. Primul element al unei liste are indexul:
3. O listă este un model de organizare a datelor de tip:
v[4], iar ultimul element al unei liste cu n elemente este v[n - 1]. Accesarea unei poziții inexistente, precum v[n], produce IndexError (o eroare care apare când accesăm o poziție care nu există în listă).Aprofundare
Cazuri particulare la accesul direct. Indexarea unei liste începe de la 0, deci al treilea element se află pe poziția 2, iar ultimul element al unei liste cu n elemente se află pe poziția n - 1. Dacă încerci să accesezi o poziție care nu există, de exemplu v[n] pe o listă cu n elemente, Python ridică o eroare de tip IndexError.
Indexare negativă. Python permite indexarea de la finalul listei cu indici negativi: v[-1] este ultimul element, v[-2] penultimul și așa mai departe. Acesta este un mod rapid și elegant de a accesa elementele din coada listei, fără a calcula len(v) - 1.
Acces direct versus acces secvențial - eficiență. Într-o listă cu un milion de elemente, accesul direct v[999999] se realizează instantaneu, deoarece elementele sunt memorate consecutiv în memorie și poziția se calculează matematic. Parcurgerea secvențială, în schimb, trebuie să verifice fiecare element până la cel căutat, ceea ce poate însemna, în cel mai rău caz, parcurgerea întregii liste.
Listă goală. O listă fără niciun element, [], nu are primul sau ultimul element. Orice încercare de acces direct pe o listă goală produce o eroare, deci înainte de a folosi v[0] sau v[-1] trebuie să verificăm că lista nu este goală, de exemplu cu if v:.
Aplicare practică. Accesul direct stă la baza tuturor aplicațiilor cu liste: când un magazin afișează „cel mai vândut produs" folosind poziția din listă, sau când un profesor afișează nota primului elev din catalog cu note[0].
Quiz de consolidare
Quiz de consolidare - lista:
1. Elementele unei liste sunt organizate în ordine:
2. Ultimul element al unei liste cu n elemente are indexul:
3. Accesul direct la un element al listei se face folosind:
PbInfo - Citire și afișare listă
Enunț:
Cerință: Se citește numărul natural n, apoi n numere întregi. Să se afișeze numerele citite, în ordinea în care au fost introduse, separate prin spații.
Date de intrare:
Programul citește de la tastatură numărul n, apoi pe linia următoare cele n numere, separate prin spații.
Date de ieșire:
Programul va afișa pe ecran cele n numere, în ordinea citirii, separate prin spații.
Restricții și precizări:
n este un număr natural, cu 1 <= n <= 1000, iar elementele listei sunt numere întregi.
Exemplu:
Intrare:
5 10 20 30 40 50
Ieșire:
10 20 30 40 50
Cum gândim soluția:
- Citim numărul n cu
input()șiint() - Citim cele n numere și le punem într-o listă cu
list(map(int, input().split())) - Parcurgem lista cu
forși afișăm fiecare element
Scrie soluția în Python:
Soluție corectă:
n = int(input())
v = list(map(int, input().split()))
for x in v:
print(x, end=" ")
Ce învățăm: citim toate numerele dintr-o singură linie într-o listă, apoi parcurgem lista cu for și afișăm elementele.
PbInfo - Afișarea primului și ultimului element
Enunț:
Cerință: Se citește numărul natural n, apoi n numere întregi. Să se afișeze primul și ultimul element al listei formate.
Date de intrare:
Programul citește de la tastatură numărul n, apoi pe linia următoare cele n numere, separate prin spații.
Date de ieșire:
Programul va afișa pe ecran, pe linii separate, primul element și ultimul element.
Restricții și precizări:
n este un număr natural, cu 1 <= n <= 1000, iar elementele listei sunt numere întregi.
Exemplu:
Intrare:
5 10 20 30 40 50
Ieșire:
10 50
Cum gândim soluția:
- Citim n și numerele în lista v
- Primul element este
v[0] - Ultimul element este
v[n - 1]
Scrie soluția în Python:
Soluție corectă:
n = int(input()) v = list(map(int, input().split())) print(v[0]) print(v[n - 1])
Ce învățăm: primul element se accesează cu indexul 0, iar ultimul cu indexul n - 1, adică numărul de elemente minus unu.
Exercițiul Practic: Primele programe cu liste
Sarcini de lucru
Completează următoarele sarcini pentru a-ți consolida cunoștințele despre liste
Sarcina 1: Caracteristicile unei liste
Cerință: Scrie, în cuvinte proprii, caracteristicile unei liste ca model conceptual liniar de organizare a datelor.
Soluție pentru Sarcina 1:
Exemplu de răspuns corect:
1. Elementele sunt aranjate în ordine, una după alta 2. Fiecare element are o poziție (index), începând cu 0 3. Fiecare element are un vecin anterior și un vecin următor 4. Avem un prim element și un ultim element 5. Elementele pot fi accesate direct, după poziția lor
Verifică: o listă este liniară, are ordine, poziții (indexuri) și elemente vecine.
Sarcina 2: Primul și ultimul element
Cerință: Scrie un program care citește n și apoi n numere într-o listă, apoi afișează primul element (cu v[0]) și ultimul element (cu v[n - 1] folosind len()).
Soluție pentru Sarcina 2:
n = int(input())
v = list(map(int, input().split()))
print("Primul element:", v[0])
print("Ultimul element:", v[len(v) - 1])
Verifică: len(v) returnează numărul de elemente, deci v[len(v) - 1] este ultimul element.