Sintaxă, exemple și cazuri de utilizare

În cadrul limbajului Python, atunci când manipulați structuri iterabile, o acțiune frecventă este determinarea numărului de elemente pe care acestea le conțin. Descoperiți modalitățile de utilizare a funcției încorporate în Python pentru a obține lungimea structurilor iterabile și multe altele.

Python oferă o varietate de structuri de date predefinite și metode asociate pentru a le gestiona. În plus, sunt disponibile funcții predefinite, extrem de utile atunci când interacționați cu aceste structuri. Un exemplu este funcția `len()`, care indică numărul de elemente prezente într-o structură iterabilă.

În acest ghid, vom explora cum se utilizează funcția `len()` cu liste, tuple, șiruri de caractere și altele. Vom analiza, de asemenea, câteva cazuri de utilizare tipice.

Să începem! 👩‍🏫

Structura funcției `len()` din Python

Mai jos este prezentată structura necesară pentru a utiliza funcția `len` a limbajului Python:

len(iterabil)

După cum se observă, funcția `len()` solicită un singur argument, care este orice structură iterabilă validă. De regulă, structura iterabilă este o listă, un tuplu sau un șir de caractere, dar poate fi și orice alt tip compatibil.

Se observă că structura utilizării funcției `len()` este destul de simplă. Acum, să trecem la exemplificarea prin cod.

📑 Pentru exemplele de cod din acest tutorial, vă recomandăm să codificați într-un REPL Python.

Utilizarea funcției `len()` cu structuri iterabile

Cu secvențe

Funcția `len()` poate fi folosită pentru a determina lungimea structurilor iterabile, cum ar fi listele, tuplurile și șirurile.

Iată un exemplu:

>>> numere = [9, 3, 6, 1, 2]
>>> len(numere)
5

>>> tuplu_numere = (9, 3, 6, 1, 2)
>>> len(tuplu_numere)
5

În cazul acestor structuri de date care stochează o secvență, de obicei, accesați elementele prin intermediul indexului lor sau obțineți o porțiune (subsecvență), după cum este necesar.

Cu alte colecții

Funcția `len()` este, de asemenea, compatibilă cu alte colecții Python, precum seturile și dicționarele.

Aceste structuri de date reprezintă colecții neordonate. Chiar dacă ordinea elementelor nu este relevantă, determinarea numărului total de elemente dintr-o colecție rămâne utilă.

>>> set_numere = set(numere)
>>> len(set_numere)
5

>>> preturi = {'Caiet': 5, 'Penar': 7, 'Semne de carte': 3, 'Pixuri': 1, 'Markere': 8}
>>> len(preturi)
5

Utilizări frecvente ale funcției `len()` din Python

Până acum, am analizat exemple simple despre utilizarea funcției `len()` pentru a determina numărul de elemente dintr-o structură iterabilă. Acum, să vedem cum putem aplica această funcție în practică.

#1. Parcurgerea cu ajutorul buclelor `for`

Buclele `for` din Python oferă o metodă de a itera printr-o structură iterabilă sub forma `for element in structură_iterabilă`. Dar, dacă doriți să accesați indexul fiecărui element în loc de elementul în sine sau atât indexul, cât și elementul împreună, puteți utiliza funcția `range()`, după cum se arată:

>>> numere = [9, 2, 4, 7, 8]
>>> for i in range(len(numere)):
...     print(f"Index {i}: {numere[i]}")

Deoarece `range(N)` generează o secvență de numere întregi de la 0, 1, 2, …, N – 1, `range(len(numere))` ne oferă setul de indexuri valide prin care trebuie să iterăm.

# Ieșire
Index 0: 9
Index 1: 2
Index 2: 4
Index 3: 7
Index 4: 8

Cu toate acestea, abordarea recomandată în Python pentru a accesa atât indexul, cât și elementul este utilizarea funcției `enumerate`:

>>> numere = [9, 2, 4, 7, 8]
>>> for idx, numar in enumerate(numere):
...     print(f"Index {idx}: {numar}")
# Ieșire
Index 0: 9
Index 1: 2
Index 2: 4
Index 3: 7
Index 4: 8

#2. Bucle condiționate cu `while`

Să presupunem că aveți o listă de numere numită `numere`. Metoda `pop()` elimină ultimul element din listă și îl returnează.

Atâta timp cât lungimea listei `len(numere)` este mai mare decât zero – există cel puțin un element care poate fi eliminat.

>>> numere = [9, 2, 4, 7, 8]
>>> while len(numere) > 0:
...     numere.pop()
# Ieșire
8
7
4
2
9

Exemplul de mai sus este o modalitate mai explicită de a scrie următoarele:

>>> numere = [9, 2, 4, 7, 8]
>>> while numere:
...     numere.pop()

`while numere:` este echivalentă cu condiția „cât timp lista de numere nu este goală”.

#3. Verificarea și validarea lungimii structurilor iterabile

O altă utilizare comună a funcției `len` este validarea lungimii anumitor structuri iterabile.

Aici verificăm dacă numele de utilizator este un șir valid, în funcție de lungimea sa (calculată cu funcția `len()`):

>>> nume_utilizator = "alt-utilizator-random"
>>> if len(nume_utilizator) > 10:
...     print("Numele de utilizator este prea lung; ar trebui să aibă maximum 10 caractere.")
... elif len(nume_utilizator) < 5:
...     print("Numele de utilizator este prea scurt; ar trebui să aibă cel puțin 5 caractere.")
... else:
...     print("Nume de utilizator valid!")
Numele de utilizator este prea lung; ar trebui să aibă maximum 10 caractere.

#4. Listă și înțelegere a dicționarului

Înțelegerile din Python oferă o sintaxă concisă pentru a construi noi structuri iterabile din cele existente. Putem utiliza funcții predefinite într-o expresie de înțelegere.

Înțelegerea listei

În această înțelegere a listei, folosim funcția `len()` pentru a obține lungimea fiecărui șir din lista de limbi.

>>> limbi = ['Python', 'C', 'Rust', 'JavaScript']
>>> lungimi_limbi = [len(limb) for limb in limbi]
>>> lungimi_limbi
[6, 1, 4, 10]

Înțelegerea dicționarului

În această înțelegere a dicționarului, utilizăm lista de limbi și funcția `len()` pentru a construi un dicționar:

>>> limbi = ['Python', 'C', 'Rust', 'JavaScript']
>>> limb_lungime = {limb: len(limb) for limb in limbi}
>>> limb_lungime
{'Python': 6, 'C': 1, 'Rust': 4, 'JavaScript': 10}

Aici, cheile și valorile sunt șirurile de limbă și lungimea șirurilor de limbă, respectiv.

#5. Parametru cheie în sortarea personalizată

Python are metoda predefinită `sort()` pentru a sorta listele și funcția `sorted()` pentru a sorta liste și alte structuri iterabile.

În ambele cazuri, puteți folosi parametrul cheie pentru a personaliza sortarea.

Aici sortăm lista de limbi în funcție de lungimea șirului.

>>> limbi = ['Python', 'C', 'Rust', 'JavaScript']
>>> limbi.sort(key=len)
>>> limbi
['C', 'Rust', 'Python', 'JavaScript']

În fragmentul de mai jos, utilizăm funcția `sorted()` pentru a obține o listă sortată.

>>> limbi = ['Hindi', 'Engleză', 'Germană', 'Franceză']
>>> sorted(limbi, key=len)
['Hindi', 'Germană', 'Franceză', 'Engleză']

În acest exemplu, atât „Germană”, cât și „Franceză” au câte 6 caractere. Deoarece funcția `sorted()` realizează o sortare stabilă, ordinea din lista inițială este menținută.

#6. Lungimea vectorilor NumPy

Funcția `len()` poate fi utilizată și cu alte structuri de date, cum ar fi vectorii NumPy.

>>> import numpy as np
>>> vector_np = np.array([3, 4, 6, 9])
>>> type(vector_np)
<class 'numpy.ndarray'>
>>> len(vector_np)
4

În acest caz, `vector_np` este un vector cu 4 elemente. Astfel, `len(vector_np)` returnează 4, adică numărul de elemente prezente în vector.

Un array este o matrice bidimensională.

Luați în considerare exemplul următor. `len(vector_np)` este 2, care reprezintă numărul de rânduri.

>>> matrice = [[1, 2, 3], [4, 5, 6]]
>>> vector_np = np.array(matrice)
>>> vector_np
array([[1, 2, 3],
       [4, 5, 6]])
>>> len(vector_np)
2

Pentru a înțelege, să revenim la matrice. Avem o structură de listă imbricată, unde lista externă conține două liste imbricate. Și funcția `len()` returnează numărul de elemente dintr-un container (aici, sunt două liste):

>>> help(len)
Help on built-in function len in module builtins:

len(obj, /)
    Return the number of items in a container.

Cu toate acestea, pe măsură ce începeți să lucrați cu matrici multidimensionale, este recomandat să utilizați atributul `shape` în schimb.

>>> vector_np.shape
(2, 3)

Erori frecvente de evitat la utilizarea funcției `len()` din Python

Înainte de a încheia discuția, să trecem în revistă câteva dintre erorile frecvente pe care ar trebui să le evitați atunci când utilizați funcția `len` în Python.

Utilizarea funcției `len()` cu tipuri de date non-iterabile

Știm că funcția `len` acceptă ca argument doar structuri iterabile valide. Adică, dacă apelați funcția `len` cu un tip de date invalid, care nu este iterabil, veți întâmpina erori.

Astfel de tipuri invalide includ tipuri de date de bază, cum ar fi numere întregi, numere în virgulă mobilă și valori booleene:

>>> len(2)
Traceback (most recent call last):
  File "", line 1, in 
TypeError: object of type 'int' has no len()

>>> len(True)
Traceback (most recent call last):
  File "", line 1, in 
TypeError: object of type 'bool' has no len()

>>> len(3.14)
Traceback (most recent call last):
  File "", line 1, in 
TypeError: object of type 'float' has no len()

În Python, generatoarele sunt opțiuni eficiente din punct de vedere al memoriei pentru cazurile de utilizare care necesită generarea de secvențe. Obiectul generator returnează elementele secvenței – la cerere – câte un element. Dar obiectele generatoare nu au o lungime.

Astfel, veți obține erori dacă încercați să calculați lungimea unui obiect generator:

>>> patrate_numere = (i * i for i in range(10))
>>> patrate_numere
 at 0x0157DBC0>
>>> len(patrate_numere)
Traceback (most recent call last):
  File "", line 1, in 
TypeError: object of type 'generator' has no len()

Folosirea `len()` cu tupluri de lungime unu

Dacă introduceți un singur element într-un tuplu, Python îl interpretează ca pe un singur element și nu ca pe un tuplu.

Iată un exemplu:

>>> numere = (1)
>>> len(numere)
Traceback (most recent call last):
  File "", line 1, in 
TypeError: object of type 'int' has no len()

Prin urmare, atunci când aveți un tuplu cu un singur element, inițializați-l în această formă: `nume_tuplu = (element,)`, astfel încât să fie interpretat ca tuplu:

>>> numere = (1,)
>>> len(numere)
1

În concluzie

Iată un rezumat a ceea ce am acoperit în acest ghid:

  • Puteți determina numărul de elemente din orice structură iterabilă folosind funcția `len()` din Python. Sintaxa pentru a utiliza funcția lungime este: `len(orice-structură-iterabilă-validă)`.
  • Aceasta include secvențe precum liste, tupluri și șiruri de caractere, dar și alte colecții, precum dicționare și seturi.
  • Funcția `len()` este frecvent utilizată în bucle și înțelegeri.
  • De asemenea, puteți utiliza funcția `len()` ca parametru cheie atunci când trebuie să personalizați sortarea în funcție de lungime. De exemplu: sortarea unei liste de șiruri în funcție de lungimea lor.

În continuare, descoperiți cum se utilizează funcția `sum()` din Python.