Exerciții Practice cu Liste
Exercițiul 1: Slicing
Problemă: Dată fiind lista L = [3, 6, 12, 24, 5, 10, 15, 20], extrage sublista [6, 24, 10, 20].
Soluție:
L = [3, 6, 12, 24, 5, 10, 15, 20]
rezultat = L[1::2]
print(rezultat) # [6, 24, 10, 20]
Explicație: L[1::2] începe de la indexul 1 și selectează din 2 în 2.
Exercițiul 2: Mutabilitate
Problemă: Ce afișează următorul cod?
x = [1, 2, 3]
y = x
y.append(4)
print(x)
Răspuns: [1, 2, 3, 4]
Explicație: y = x face ca ambele variabile să refere același obiect. Modificarea prin y afectează și x.
Exercițiul 3: Eliminare element din listă imbricată
Problemă: Din lista L = [10, [3.14, True, [20, "test", 2.71]], "usor"], elimină "test".
Soluții posibile:
# Soluția 1: del
del L[1][2][1]
# Soluția 2: pop
L[1][2].pop(1)
# Soluția 3: slice assignment
L[1][2][1:2] = []
Atenție: L[1][2][1] = "" NU elimină elementul, ci îl înlocuiește cu șir gol!
Exercițiul 4: List Comprehension
Problemă: Creează lista pătratelor numerelor de la 0 la 4.
Soluție:
patrate = [x**2 for x in range(5)]
print(patrate) # [0, 1, 4, 9, 16]
Exercițiul 5: Filtrare cu List Comprehension
Problemă: Din lista [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], extrage numerele pare.
Soluție:
numere = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
pare = [x for x in numere if x % 2 == 0]
print(pare) # [2, 4, 6, 8, 10]
Exercițiul 6: Găsirea maximului din liste imbricate
Problemă: Găsește cel mai mare număr din L = [[10, 70, -100], [50], [1, 100, 70]].
Soluții:
L = [[10, 70, -100], [50], [1, 100, 70]]
# Soluția 1: max cu comprehension
lmax = max([max(r) for r in L])
print(lmax) # 100
# Soluția 2: aplatizare
lmax = max([x for r in L for x in r])
print(lmax) # 100
# GREȘIT: max(L) compară listele lexicografic!
Exercițiul 7: Sortare
Problemă: Care este diferența dintre sorted() și list.sort()?
Răspuns:
lista = [3, 1, 4, 1, 5]
# sorted() - returnează nouă listă, nu modifică originalul
noua = sorted(lista)
print(lista) # [3, 1, 4, 1, 5] - neschimbată
print(noua) # [1, 1, 3, 4, 5]
# list.sort() - modifică în loc, returnează None
lista.sort()
print(lista) # [1, 1, 3, 4, 5] - modificată
Exercițiul 8: Ștergerea elementelor
Problemă: Cum elimini elementul de la indexul 2 din [10, 20, 30, 40, 50]?
Soluții:
L = [10, 20, 30, 40, 50]
# Soluția 1: del
del L[2] # L devine [10, 20, 40, 50]
# Soluția 2: pop (și obține valoarea)
elem = L.pop(2) # elem=30, L=[10, 20, 40, 50]
# Soluția 3: slicing
L = L[:2] + L[3:] # [10, 20, 40, 50]
Teste pentru Examen
-
Ce returnează
[1,2,3,4,5][1:4]?- Răspuns:
[2, 3, 4]
- Răspuns:
-
Ce returnează
[1,2,3] + [4,5]?- Răspuns:
[1, 2, 3, 4, 5]
- Răspuns:
-
Ce returnează
[1,2,3] * 2?- Răspuns:
[1, 2, 3, 1, 2, 3]
- Răspuns:
-
Ce metodă adaugă un element la sfârșitul listei?
- Răspuns:
append()
- Răspuns:
-
Ce metodă elimină și returnează ultimul element?
- Răspuns:
pop()
- Răspuns: