Verificați lungimea listei în Python în 3 pași simpli

Explorarea Modalităților de Determinare a Lungimii unei Liste în Python

Acest articol va analiza diverse metode prin care se poate afla lungimea unei liste în Python, evaluând eficiența fiecăreia.

Ce este o Listă în Python?

În Python, o listă reprezintă o structură de date care poate găzdui o colecție ordonată de elemente. Această colecție poate cuprinde date de diferite tipuri, cum ar fi numere întregi, numere cu zecimale (float), șiruri de caractere (string), valori booleene sau chiar alte liste (liste imbricate).


int_list = [1, 2, 3, 4, 5]
print(int_list) # Rezultat: [1, 2, 3, 4, 5]

float_list = [1.1, 2.2, 3.3, 4.4, 5.5]
print(float_list) # Rezultat: [1.1, 2.2, 3.3, 4.4, 5.5]

string_list = ['Geekflare', 'Cloudflare', 'Amazon']
print(string_list) # Rezultat: ['Geekflare', 'Cloudflare', 'Amazon']

boolean_list = [True, False]
print(boolean_list) # Rezultat: [True, False]

nested_list = [[1, 2], [1.1, 2.2], ['Geekflare', 'Cloudflare'], [True, False]]
print(nested_list) # Rezultat: [[1, 2], [1.1, 2.2], ['Geekflare', 'Cloudflare'], [True, False]]

different_datatype_list = [1, 1.1, 'Geekflare', True, [1, 1.1, 'Geekflare', True]]
print(different_datatype_list) # Rezultat: [1, 1.1, 'Geekflare', True, [1, 1.1, 'Geekflare', True]]

Listele în Python se pot crea fie folosind paranteze pătrate [], fie prin intermediul funcției constructor list().


square_bracket_list = [1, 1.1, 'Geekflare', True, [1, 1.1, 'Geekflare', True]]
print(square_bracket_list) # Rezultat: [1, 1.1, 'Geekflare', True, [1, 1.1, 'Geekflare', True]]

constructor_list = list((1, 1.1, 'tipstrick.ro', True, [1, 1.1, 'Geekflare', True]))
print(constructor_list) # Rezultat: [1, 1.1, 'Geekflare', True, [1, 1.1, 'Geekflare', True]]

Ambele metode prezentate generează același tip de listă. Listele în Python sunt mutabile, acceptă duplicate și pot fi accesate prin indexare.

Modalități de a Determina Lungimea unei Liste

  • Folosind funcția încorporată len()
  • Utilizând metoda length_hint din modulul operator
  • Implementând o funcție personalizată cu un contor

Metoda 1: Funcția Încorporată len()

Funcția len() este o funcție standard în Python, utilizată pentru a determina lungimea diferitelor tipuri de date iterabile, inclusiv liste, seturi, tupluri și dicționare.


languages = ['Python', 'Java', 'C++', 'PHP', 'nodeJS']
languages_length = len(languages)
print('Lungimea listei de limbaje este: ', languages_length)

Rezultat:


Lungimea listei de limbaje este:  5

Pentru a testa aceste coduri, puteți folosi un interpretor Python local sau un compilator Python online.

Metoda 2: Metoda length_hint din Modulul operator

Metoda length_hint din modulul operator este concepută pentru a indica o estimare a lungimii unui obiect iterabil. Spre deosebire de alți operatori încorporați, aceasta necesită importul modulului operator.


import operator

languages = ['Python', 'Java', 'C++', 'PHP', 'nodeJS']
languages_length = operator.length_hint(languages)
print('Lungimea listei de limbaje folosind Operator este: ', languages_length)

Rezultat:


Lungimea listei de limbaje folosind Operator este:  5

Metoda 3: Funcție Personalizată cu Contor

Această abordare presupune crearea unei funcții personalizate care parcurge iterabilul cu un loop for și utilizează un contor pentru a calcula lungimea acestuia.

Funcția personalizată:


def iterable_count(iterable):
  length = 0
  for item in iterable:
    length += 1
  return length

Exemplu de utilizare:


def iterable_count(iterable):
  length = 0
  for item in iterable:
    length += 1
  return length

languages = ['Python', 'Java', 'C++', 'PHP', 'nodeJS']
languages_length = iterable_count(languages)
print('Lungimea listei de limbaje folosind funcția personalizată este: ', languages_length)

Rezultat:


Lungimea listei de limbaje folosind funcția personalizată este:  5

Analiza Comparativă a Metodelor

Pentru a evalua performanța fiecărei metode, vom testa timpul de execuție pentru liste de dimensiuni mari și mici.


import timeit # pentru benchmarking
import operator

def iterable_count(iterable):
  length = 0
  for item in iterable:
    length+=1
  return length

integer_list = list(range(1, 9999999))

# Verificarea lungimii cu len()
start_time = timeit.default_timer()
len_length = len(integer_list)
print(timeit.default_timer() - start_time, 'Lungimea listei de numere întregi cu len() este: ', len_length)

# Verificarea lungimii cu operator.length_hint
start_time = timeit.default_timer()
len_length = operator.length_hint(integer_list)
print(timeit.default_timer() - start_time, 'Lungimea listei de numere întregi cu length_hint este: ', len_length)

# Verificarea lungimii cu funcția personalizată
start_time = timeit.default_timer()
iterable_count_length = iterable_count(integer_list)
print(timeit.default_timer() - start_time, 'Lungimea listei de numere întregi cu funcția personalizată este: ', iterable_count_length)

Rezultat pentru o listă mare:


3.957189619541168e-06 Lungimea listei de numere întregi cu len() este:  9999998
3.0621886253356934e-06 Lungimea listei de numere întregi cu length_hint este:  9999998
0.4059128537774086 Lungimea listei de numere întregi cu funcția personalizată este:  9999998

Pentru liste mari, length_hint este cea mai rapidă metodă, datorită utilizării de către CPython runtime a unor indici de lungime. Urmează len(), iar funcția personalizată este semnificativ mai lentă.

Analiză pentru liste mici:


import timeit
import operator

def iterable_count(iterable):
  length = 0
  for item in iterable:
    length+=1
  return length

integer_list = list(range(1, 100))

# Verificarea lungimii cu len()
start_time = timeit.default_timer()
len_length = len(integer_list)
print(timeit.default_timer() - start_time, 'Lungimea listei de numere întregi cu len() este: ',len_length)

# Verificarea lungimii cu operator.length_hint
start_time = timeit.default_timer()
len_length = operator.length_hint(integer_list)
print(timeit.default_timer() - start_time, 'Lungimea listei de numere întregi cu length_hint este: ',len_length)

# Verificarea lungimii cu funcția personalizată
start_time = timeit.default_timer()
iterable_count_length = iterable_count(integer_list)
print(timeit.default_timer() - start_time, 'Lungimea listei de numere întregi cu funcția personalizată este: ',iterable_count_length)

Rezultat pentru o listă mică:


7.813796401023865e-07 Lungimea listei de numere întregi cu len() este:  99
1.1278316378593445e-06 Lungimea listei de numere întregi cu length_hint este:  99
3.462657332420349e-06 Lungimea listei de numere întregi cu funcția personalizată este:  99

Pentru liste mai mici, funcția len() se dovedește a fi ușor mai rapidă decât length_hint. Funcția personalizată rămâne cea mai lentă opțiune.

Concluzie

Am analizat diferite metode de a determina lungimea listelor în Python. Metoda len() este potrivită pentru majoritatea cazurilor, fiind eficientă și ușor de folosit. Pentru liste foarte mari, length_hint poate oferi un mic avantaj de performanță. Funcția personalizată, deși funcțională, nu oferă avantaje de viteză comparativ cu celelalte metode.