Didaxis
lecție · Informatică

Colecții mixte Python

Liste de liste sau de șiruri și accesul la elemente imbricate.

AprofundarePeste programa în vigoare, pentru cine vrea mai mult.
Actualizat la: 30 octombrie 2026
1pe scurtstratul 1 din 2 · rezumatul lecției

Pe scurt

Colecțiile Python pot fi combinate: o listă poate conține dicționare, iar un dicționar poate avea liste drept valori. Alegem structura după întrebările problemei. Pentru elevi cu nume și note, o listă de dicționare păstrează mai multe înregistrări ordonate; fiecare dicționar leagă câmpurile aceluiași elev.

Desen la lecția „Colecții mixte Python”
2în detaliustratul 2 din 2 · pentru clasă și Bacalaureat

În detaliu

Colecțiile Python se pot imbrica: o listă poate conține liste, șiruri sau dicționare, iar un dicționar poate avea liste ori alte dicționare drept valori. Alegerea structurii urmează întrebările problemei. O listă de dicționare păstrează mai multe înregistrări în ordine, iar fiecare dicționar leagă câmpurile aceluiași obiect. Un dicționar de liste grupează valori după o cheie, de exemplu notele fiecărei clase. O listă de liste reprezintă un tabel sau o matrice. Accesul la un element imbricat se face prin indici sau chei înlănțuite, de la exterior spre interior: întâi un indice de listă sau o cheie de dicționar, apoi următorul nivel. La fiecare nivel se urmărește tipul: indicele este întreg pentru liste și șiruri, iar cheia are tipul cheilor dicționarului.

Exemplul 1 — listă de dicționare.

elevi = [{"nume": "Ana", "note": [8, 10]},
         {"nume": "Dan", "note": [7]}]
print(elevi[0]["nume"], sum(elevi[0]["note"]))

elevi[0] este dicționarul Anei; ["nume"] dă Ana, iar lista notelor conține 8 și 10, cu suma 18. Se afișează Ana 18. Elevii cu media cel puțin 8 se obțin printr-o parcurgere: [e["nume"] for e in elevi if sum(e["note"]) / len(e["note"]) >= 8] dă ['Ana'], pentru că media Anei este 9, iar a lui Dan este 7. Înainte de împărțire se verifică ca lista notelor să nu fie goală.

Exemplul 2 — listă de liste și de șiruri. Pentru grupe = [[2, 4], [7]], expresia grupe[0][1] este 4: primul indice alege prima listă, al doilea alege al doilea element al ei. Lista interioară grupe[1] are lungimea 1. Pentru nume = ["Ana", "Dan"], expresia nume[1][0] este D: nume[1] este șirul "Dan", iar [0] este primul lui caracter. O listă de liste cu același număr de elemente în fiecare rând reprezintă o matrice: pentru mat = [[1, 2, 3], [4, 5, 6]], mat[1][2] este 6, coloana de indice 1 este [r[1] for r in mat], adică [2, 5], iar suma tuturor elementelor este sum(sum(r) for r in mat), adică 21.

Exemplul 3 — dicționar de liste.

grupe = {"9A": [8, 9, 10], "9B": [7, 6]}
medii = {k: sum(v) / len(v) for k, v in grupe.items()}
print(medii)

Se afișează {'9A': 9.0, '9B': 6.5}. Cheia "9A" este asociată listei [8, 9, 10], cu media , iar cheia "9B" listei [7, 6], cu media . O listă adăugată sub o cheie se modifică prin grupe["9B"].append(8); obiectul modificat este lista, nu dicționarul. Dacă două chei ar indica aceeași listă, modificarea ei s-ar vedea sub ambele chei.

Atenție la crearea unei liste de liste: [[0] * 3] * 2 repetă aceeași listă interioară de două ori, deci modificarea unui element apare în ambele rânduri, pe când [[0] * 3 for _ in range(2)] creează două liste distincte.

Exemplul 4 — gruparea înregistrărilor după cheie. Lista de perechi note = [("Ana", 9), ("Dan", 7), ("Ana", 10)] se transformă într-un dicționar de liste:

d = {}
for nume, nota in note:
    d.setdefault(nume, []).append(nota)
print(d)

Se afișează {'Ana': [9, 10], 'Dan': [7]}. La prima apariție a cheii, setdefault creează lista goală și o întoarce; la următoarele, întoarce lista existentă, iar append o completează. Fără setdefault, instrucțiunea d[nume].append(nota) ridică KeyError la prima notă a fiecărui elev. Ordinea cheilor este cea a primei apariții. Clasamentul după medie se obține prin sorted(d, key=lambda k: sum(d[k]) / len(d[k]), reverse=True) și dă ['Ana', 'Dan'], deoarece mediile sunt 9,5 și 7. O listă de dicționare se ordonează după un câmp cu o cheie de sortare, o funcție care primește un dicționar și întoarce valoarea comparată: pentru lista elevi din primul exemplu, sorted(elevi, key=lambda e: len(e["note"]), reverse=True)[0]["nume"] dă Ana, elevul cu cele mai multe note.

Greșeli frecvente

  • Greșit: grupe[0][1] alege al doilea element al primului nivel.
    Corect: primul indice alege lista exterioară, al doilea alege elementul din lista interioară.
  • Greșit: nume[1][0] este primul element al listei nume.
    Corect: este primul caracter al șirului de pe poziția 1.
  • Greșit: media unei liste goale se poate calcula prin sum(v) / len(v).
    Corect: lungimea 0 duce la împărțire la zero și trebuie verificată înainte.
în contul tăuPremium

Testează-te pe această lecție

Lecția o citești aici, fără cont. Testele pe lecții și capitole sunt în cont, cu grile originale Didaxis și explicația fiecăreia: gratuit 10 grile pe zi, fără limită cu Premium, 49 de lei pe lună pentru fiecare copil.

Înainte și după

Surse și referințe

Redactare proprie, conform programei:

Documente consultate

  • Programele școlare noi de informatică pentru clasele X–XII (OMEC 4370/2026, MO 591 bis/20.07.2026), CNCE, anexa 2, p. 20–21; anexa 7, p. 133; rocnee.eu
  • Python Software Foundation, Python Tutorial, capitolul 5, docs.python.org/3/tutorial/datastructures.html

Desene: Redactare proprie (desen original), conform OMEC 4370/2026, anexa 2, Informatică clasa a X-a, p. 20–21; rocnee.eu

lecțiile sunt gratuite

Ai citit lecția. Acum verifică-te.