🐍

Metode si Operatii cu Liste

Programare Python Intermediar 1 min citire 0 cuvinte

Metode si Operatii cu Liste

Metode de Adaugare

append() - Adauga la sfarsit

fructe = ["mar", "para"]
fructe.append("banana")
print(fructe)  # ['mar', 'para', 'banana']

# append() adauga UN element (chiar si lista)
fructe.append(["kiwi", "mango"])
print(fructe)  # ['mar', 'para', 'banana', ['kiwi', 'mango']]

extend() - Adauga multiple elemente

fructe = ["mar", "para"]
fructe.extend(["banana", "kiwi"])
print(fructe)  # ['mar', 'para', 'banana', 'kiwi']

# extend() cu orice iterabil
fructe.extend("ABC")
print(fructe)  # ['mar', 'para', 'banana', 'kiwi', 'A', 'B', 'C']

insert() - Adauga la pozitie specifica

fructe = ["mar", "banana"]
fructe.insert(1, "para")  # (index, element)
print(fructe)  # ['mar', 'para', 'banana']

fructe.insert(0, "kiwi")  # La inceput
print(fructe)  # ['kiwi', 'mar', 'para', 'banana']

fructe.insert(100, "mango")  # Index mare = la sfarsit
print(fructe)  # [..., 'mango']

Metode de Stergere

remove() - Sterge prima aparitie

fructe = ["mar", "para", "mar", "banana"]
fructe.remove("mar")
print(fructe)  # ['para', 'mar', 'banana']

# ValueError daca nu exista
# fructe.remove("kiwi")  # ValueError!

pop() - Sterge si returneaza

fructe = ["mar", "para", "banana"]

# pop() fara argument - ultimul element
ultim = fructe.pop()
print(ultim)   # banana
print(fructe)  # ['mar', 'para']

# pop(index) - element la pozitia specificata
primul = fructe.pop(0)
print(primul)  # mar
print(fructe)  # ['para']

# IndexError pentru index invalid
# fructe.pop(10)  # IndexError!

clear() - Sterge toate elementele

fructe = ["mar", "para", "banana"]
fructe.clear()
print(fructe)  # []

del - Sterge element sau slice

fructe = ["mar", "para", "banana", "kiwi"]

del fructe[1]
print(fructe)  # ['mar', 'banana', 'kiwi']

del fructe[0:2]
print(fructe)  # ['kiwi']

del fructe  # Sterge variabila complet

Metode de Cautare

index() - Gaseste pozitia

fructe = ["mar", "para", "banana", "para"]

print(fructe.index("para"))     # 1 (prima aparitie)
print(fructe.index("para", 2))  # 3 (cauta de la index 2)

# ValueError daca nu exista
# fructe.index("kiwi")  # ValueError!

count() - Numara aparitiile

numere = [1, 2, 2, 3, 2, 4, 2]
print(numere.count(2))  # 4
print(numere.count(5))  # 0

Metode de Sortare

sort() - Sorteaza in-place

numere = [3, 1, 4, 1, 5, 9, 2, 6]
numere.sort()
print(numere)  # [1, 1, 2, 3, 4, 5, 6, 9]

# Sortare descrescatoare
numere.sort(reverse=True)
print(numere)  # [9, 6, 5, 4, 3, 2, 1, 1]

# Sortare cu key
cuvinte = ["banana", "Mar", "para"]
cuvinte.sort()  # Majuscule primele
print(cuvinte)  # ['Mar', 'banana', 'para']

cuvinte.sort(key=str.lower)  # Ignora case
print(cuvinte)  # ['banana', 'Mar', 'para']

sorted() - Returneaza lista noua

original = [3, 1, 4, 1, 5]
sortata = sorted(original)
print(sortata)   # [1, 1, 3, 4, 5]
print(original)  # [3, 1, 4, 1, 5] - neschimbat!

reverse() - Inverseaza in-place

fructe = ["mar", "para", "banana"]
fructe.reverse()
print(fructe)  # ['banana', 'para', 'mar']

reversed() - Returneaza iterator

fructe = ["mar", "para", "banana"]
inversat = list(reversed(fructe))
print(inversat)  # ['banana', 'para', 'mar']
print(fructe)    # ['mar', 'para', 'banana'] - neschimbat!

Copierea Listelor

Copie superficiala (shallow copy)

original = [1, 2, 3]

# Metode pentru copie superficiala
copie1 = original[:]
copie2 = original.copy()
copie3 = list(original)

copie1[0] = 99
print(original)  # [1, 2, 3] - neschimbat

Problema cu liste nested

original = [[1, 2], [3, 4]]
copie = original[:]

copie[0][0] = 99
print(original)  # [[99, 2], [3, 4]] - modificat!

Copie profunda (deep copy)

import copy

original = [[1, 2], [3, 4]]
copie_profunda = copy.deepcopy(original)

copie_profunda[0][0] = 99
print(original)       # [[1, 2], [3, 4]] - neschimbat!
print(copie_profunda) # [[99, 2], [3, 4]]

Alte Operatii Utile

min(), max(), sum()

numere = [5, 2, 8, 1, 9]
print(min(numere))  # 1
print(max(numere))  # 9
print(sum(numere))  # 25

any(), all()

print(any([False, True, False]))   # True
print(all([True, True, False]))    # False

# Cu liste de numere
print(any([0, 0, 1]))  # True (1 e truthy)
print(all([1, 2, 3]))  # True (toate truthy)

Greseli Frecvente

1. Confuzie append vs extend

a = [1, 2]
a.append([3, 4])   # [[1, 2, [3, 4]]
a.extend([5, 6])   # [1, 2, [3, 4], 5, 6]

2. sort() vs sorted()

lista = [3, 1, 2]
# sort() modifica si returneaza None
rezultat = lista.sort()
print(rezultat)  # None!

# sorted() returneaza lista noua
lista = [3, 1, 2]
rezultat = sorted(lista)
print(rezultat)  # [1, 2, 3]

3. Shallow copy cu liste nested

a = [[1], [2]]
b = a[:]
b[0].append(99)
print(a)  # [[1, 99], [2]] - modificat!

Puncte Cheie pentru Examen

  • append() adauga UN element, extend() adauga MULTIPLE
  • pop() sterge si returneaza, remove() doar sterge
  • sort() modifica lista, sorted() creeaza lista noua
  • [:] face copie superficiala, nu profunda
  • index() si remove() arunca exceptii daca elementul nu exista

Intrebari de Verificare

  1. Ce diferenta e intre append([1,2]) si extend([1,2])?
  2. Ce returneaza list.sort()?
  3. Cum faci o copie profunda a unei liste nested?
  4. Ce metoda sterge si returneaza ultimul element?

📚 Articole Corelate