Introducere in Liste
Ce este o Lista?
O lista in Python este o colectie ordonata si mutabila de elemente. Listele pot contine elemente de orice tip si pot fi modificate dupa creare.
Crearea Listelor
# Lista goala
lista_goala = []
alta_lista_goala = list()
# Lista cu elemente
numere = [1, 2, 3, 4, 5]
fructe = ["mar", "para", "banana"]
mixta = [1, "text", 3.14, True, None]
# Lista din string
litere = list("Python") # ['P', 'y', 't', 'h', 'o', 'n']
# Lista din range
numere = list(range(5)) # [0, 1, 2, 3, 4]
Accesarea Elementelor (Indexare)
Elementele sunt accesate prin index, incepand de la 0:
fructe = ["mar", "para", "banana", "kiwi"]
# 0 1 2 3 (indecsi pozitivi)
# -4 -3 -2 -1 (indecsi negativi)
print(fructe[0]) # mar (primul)
print(fructe[2]) # banana
print(fructe[-1]) # kiwi (ultimul)
print(fructe[-2]) # banana (penultimul)
IndexError:
fructe = ["mar", "para", "banana"]
# print(fructe[3]) # IndexError: list index out of range
# print(fructe[-4]) # IndexError
Mutabilitatea Listelor
Listele sunt mutabile - elementele pot fi modificate:
fructe = ["mar", "para", "banana"]
fructe[1] = "portocala"
print(fructe) # ['mar', 'portocala', 'banana']
Comparatie cu string-urile (imutabile):
# String - IMUTABIL
text = "Python"
# text[0] = "J" # TypeError!
# Lista - MUTABILA
lista = list("Python")
lista[0] = "J"
print(lista) # ['J', 'y', 't', 'h', 'o', 'n']
Lungimea Listei
fructe = ["mar", "para", "banana"]
print(len(fructe)) # 3
lista_goala = []
print(len(lista_goala)) # 0
Verificarea Apartenentei
Operatorul in verifica daca un element exista in lista:
fructe = ["mar", "para", "banana"]
print("mar" in fructe) # True
print("kiwi" in fructe) # False
print("kiwi" not in fructe) # True
Liste Nested (Imbricate)
Listele pot contine alte liste:
matrice = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
print(matrice[0]) # [1, 2, 3]
print(matrice[0][1]) # 2
print(matrice[1][2]) # 6
# Modificare element nested
matrice[1][1] = 50
print(matrice[1]) # [4, 50, 6]
Concatenare si Repetitie
# Concatenare cu +
lista1 = [1, 2, 3]
lista2 = [4, 5, 6]
combinata = lista1 + lista2
print(combinata) # [1, 2, 3, 4, 5, 6]
# Repetitie cu *
pattern = [0] * 5
print(pattern) # [0, 0, 0, 0, 0]
zeros = [[0] * 3] * 2 # Atentie la referinte!
print(zeros) # [[0, 0, 0], [0, 0, 0]]
Capcana cu repetitia listelor nested:
# GRESIT - subliste sunt acelasi obiect!
matrice = [[0] * 3] * 3
matrice[0][0] = 1
print(matrice) # [[1, 0, 0], [1, 0, 0], [1, 0, 0]]
# CORECT - subliste independente
matrice = [[0] * 3 for _ in range(3)]
matrice[0][0] = 1
print(matrice) # [[1, 0, 0], [0, 0, 0], [0, 0, 0]]
Compararea Listelor
a = [1, 2, 3]
b = [1, 2, 3]
c = [1, 2, 4]
print(a == b) # True (valori egale)
print(a is b) # False (obiecte diferite)
print(a < c) # True (comparatie element cu element)
print([1, 2] < [1, 2, 3]) # True (lista mai scurta)
Iterarea prin Liste
fructe = ["mar", "para", "banana"]
# Iterare simpla
for fruct in fructe:
print(fruct)
# Cu index (enumerate)
for i, fruct in enumerate(fructe):
print(f"{i}: {fruct}")
# Cu range si len
for i in range(len(fructe)):
print(f"{i}: {fructe[i]}")
Greseli Frecvente
1. Index out of range
lista = [1, 2, 3]
# lista[3] # IndexError!
lista[2] # OK - ultimul element
2. Confuzie referinta vs copie
a = [1, 2, 3]
b = a # b refera ACELASI obiect!
b[0] = 99
print(a) # [99, 2, 3] - modificat si a!
# Pentru copie independenta:
b = a[:] # sau b = a.copy() sau b = list(a)
3. Modificare in timpul iterarii
# GRESIT
lista = [1, 2, 3, 4, 5]
for x in lista:
if x % 2 == 0:
lista.remove(x) # Comportament imprevizibil!
Puncte Cheie pentru Examen
- Listele sunt mutabile si ordonate
- Indexare:
[0]primul,[-1]ultimul len()returneaza numarul de elementeinverifica apartenenta- Listele pot contine orice tip de date
- Atentie la referinte vs copii!
Intrebari de Verificare
- Ce returneaza
[1, 2, 3][-1]? - Ce tip de eroare apare la
[1, 2][5]? - Cum creezi o copie independenta a unei liste?
- Ce afiseaza
len([[1, 2], [3, 4, 5]])?