Școala Româno-Britanică
Modulul 2 Clasa a IX-a | Python

Ora 1: Modelul conceptual liniar - lista

Ce vei învăța astăzi: Ce este o listă, caracteristici, acces direct și secvențial

Rezultat practic: Identifici caracteristicile modelului liniar de tip listă și accesul direct la elemente (Competența 1.1).

Competența 1.1 Săptămâna 8

Înainte de a începe

De ce contează? Lista este baza oricărei prelucrări de date în Python: cataloage, stocuri, note și vânzări sunt, în esență, liste. Fără noțiunea de poziție și de acces direct (ajungerea imediată la un element, după poziția lui) nu poți construi nimic din restul modulului.

Ce știi deja?

Din Modulul 1 știi să citești valori cu input() și int() și să afișezi rezultate cu print(). Cum ai reține mai multe numere citite de la tastatură, ca să le folosești și după ce le-ai citit?

Ideea-cheie: O listă este un șir ordonat de elemente în care fiecare element are o poziție (index), iar accesul direct la element se face după acea poziție.
SINTEZĂ TEORETICĂ ȘI EXEMPLE GHIDATE

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.

Definiția listei ca model conceptual liniar (un model de organizare a datelor în care elementele sunt aranjate una după alta, în linie dreaptă)
Caracteristicile unei liste: ordine, elemente, vecini
Acces direct versus acces secvențial
Exemple de liste din viața reală

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:

Ordine

Elementele au o ordine fixă, respectată mereu

Elemente

Fiecare element are o poziție (index), începând cu 0

Vecini

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

CITESTE n (numarul de elemente) CITESTE cele n valori ale listei v, in ordine AFISEAZA lista v AFISEAZA primul element: v[0] AFISEAZA ultimul element: v[n-1]
Prima listă în Python
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:
listă ordine index 0

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:

Ai grijă la: primul element al unei liste are indexul 0, nu 1: al 5-lea element este 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:

APLICARE ȘI REZOLVARE DE PROBLEME

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:
  1. Citim numărul n cu input() și int()
  2. Citim cele n numere și le punem într-o listă cu list(map(int, input().split()))
  3. 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:
  1. Citim n și numerele în lista v
  2. Primul element este v[0]
  3. 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ȚII PRACTICE

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.

Scrie pe caiet - De reținut

Titlul lecției

Ora 1: Modelul conceptual liniar - lista

Definiția lecției

Lista este un model conceptual liniar de organizare a datelor: elementele sunt așezate una după alta, fiecare având o poziție bine stabilită, numită index, care începe de la 0. Primul element se află pe indexul 0, iar ultimul element al unei liste cu n elemente se află pe indexul n - 1. Accesul direct permite ajungerea imediată la un element după poziția lui, în timp ce accesul secvențial presupune parcurgerea elementelor unul câte unul. Un exemplu real este catalogul clasei: fiecare elev are un număr de ordine fix, iar profesorul găsește imediat nota oricărui elev după numărul lui, exact cum programul ajunge la v[3] după poziția 3.

Definiții esențiale

Algoritmul cheie - pseudocod

CITESTE n CITESTE valorile listei v AFISEAZA lista v AFISEAZA primul element: v[0] AFISEAZA ultimul element: v[n-1]

Algoritmul cheie - cod Python

n = int(input())
v = list(map(int, input().split()))

print(v)
print("Primul element:", v[0])
print("Ultimul element:", v[n - 1])

Greșeli comune de evitat

Sfaturi practice și trucuri

Exemplu practic

De unde întâlnim listele în viața reală? Un magazin ține produsele din vitrină într-o listă, ca un catalog de inventar. Programul afișează primul și ultimul produs, folosind accesul direct după poziție:

produse = ["caiet", "pix", "ghiozdan", "stilou"]
print("Primul produs:", produse[0])
print("Ultimul produs:", produse[len(produse) - 1])

Programul afișează „caiet" pentru prima poziție și „stilou" pentru ultima, fără a parcurge restul listei.