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 modululoperator
- 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.