U ovom tekstu ćemo razmotriti kako da utvrdimo dužinu liste koristeći različite jednostavne tehnike i analizirati koje su od njih najefikasnije.
Šta je Python lista?
Lista predstavlja kolekciju podataka u Pythonu koja omogućava skladištenje različitih tipova podataka. U okviru jedne liste, mogu se naći celi brojevi, decimalni brojevi, stringovi (nizovi karaktera), logičke vrednosti, pa čak i druge liste.
int_list = [1, 2, 3, 4, 5] print(int_list) # izlaz -> [1, 2, 3, 4, 5] float_list = [1.1, 2.2, 3.3, 4.4, 5.5] print(float_list) # izlaz -> [1.1, 2.2, 3.3, 4.4, 5.5] string_list = ['Geekflare', 'Cloudflare', 'Amazon'] print(string_list) # izlaz -> ['Geekflare', 'Cloudflare', 'Amazon'] boolean_list = [True, False] print(boolean_list) # izlaz -> [True, False] nested_list = [[1, 2], [1.1, 2.2], ['Geekflare', 'Cloudflare'], [True, False]] print(nested_list) # [[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) # izlaz -> [1, 1.1, 'Geekflare', True, [1, 1.1, 'Geekflare', True]]
Python liste se mogu kreirati koristeći uglaste zagrade ili uz pomoć funkcije konstruktora list.
square_bracket_list = [1, 1.1, 'Geekflare', True, [1, 1.1, 'Geekflare', True]] print(square_bracket_list) # izlaz -> [1, 1.1, 'Geekflare', True, [1, 1.1, 'Geekflare', True]] constructor_list = list((1, 1.1, 'techblog.co.rs', True, [1, 1.1, 'Geekflare', True])) print(constructor_list) # izlaz -> [1, 1.1, 'Geekflare', True, [1, 1.1, 'Geekflare', True]]
Gore navedeni primeri pokazuju da square_bracket_list
predstavlja listu kreiranu pomoću uglastih zagrada, dok constructor_list
predstavlja listu formiranu korišćenjem konstruktora liste. Oba načina generišu identične liste.
Lista je promenljiva, dozvoljava ponavljanje elemenata i može se pristupiti njenim elementima pomoću indeksa.
Metode za određivanje dužine liste
- Ugrađena funkcija
len()
- Metoda
length_hint
iz modula operator - Prilagođena funkcija sa brojačem
Metod 1: Ugrađena funkcija len()
Funkcija len()
je ugrađena u Python i koristi se za određivanje broja elemenata u listi, kao i u drugim iterabilnim objektima kao što su skupovi (set), torke (tuple) i rečnici (dictionary).
Primer koda:
languages = ['Python', 'Java', 'C++', 'PHP', 'nodeJS'] languages_length = len(languages) print('Dužina liste jezika je: ', languages_length)
Izlaz:
Dužina liste jezika je: 5
Pretpostavlja se da imate instaliran Python. Ako nemate, možete koristiti online Python interpreter za vežbanje.
Metod 2: Metoda length_hint
iz modula operator
length_hint
se koristi za vraćanje procenjene dužine iterabilnog objekta (liste, skupa, torke, rečnika). Ova metoda se nalazi u okviru Python modula operator
i nije direktno dostupna kao ostale ugrađene funkcije.
Primer koda:
import operator languages = ['Python', 'Java', 'C++', 'PHP', 'nodeJS'] languages_length = operator.length_hint(languages) print('Dužina liste jezika pomoću operatora je: ', languages_length)
Izlaz:
Dužina liste jezika pomoću operatora je: 5
Metod 3: Prilagođena funkcija sa brojačem
U ovom metodu, koristimo tradicionalni pristup pomoću for
petlje i brojača da bismo izračunali dužinu liste.
Napisacemo funkciju u Pythonu koja prihvata listu ili drugi iterabilni objekat kao argument i vraća njegovu dužinu.
Kod funkcije:
def iterable_count(iterable): length = 0 for item in iterable: length+=1 return length
Primer korišćenja:
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('Dužina liste jezika pomoću prilagođene funkcije je: ',languages_length)
Izlaz:
Dužina liste jezika pomoću prilagođene funkcije je: 5
Analiza tri metode
Analiza performansi za veliku listu:
import timeit # za testiranje vremena izvršavanja import operator def iterable_count(iterable): length = 0 for item in iterable: length+=1 return length integer_list = list(range(1, 9999999)) # provera dužine pomoću len() start_time = timeit.default_timer() len_length = len(integer_list) print(timeit.default_timer() - start_time, 'Dužina liste celih brojeva pomoću len() je: ',len_length) # provera dužine pomoću operator.length_hint start_time = timeit.default_timer() len_length = operator.length_hint(integer_list) print(timeit.default_timer() - start_time, 'Dužina liste celih brojeva pomoću length_hint je: ',len_length) start_time = timeit.default_timer() iterable_count_length = iterable_count(integer_list) print(timeit.default_timer() - start_time, 'Dužina liste celih brojeva pomoću prilagođene funkcije je: ',iterable_count_length)
Izlaz:
3.957189619541168e-06 Dužina liste celih brojeva pomoću len() je: 9999998 3.0621886253356934e-06 Dužina liste celih brojeva pomoću length_hint je: 9999998 0.4059128537774086 Dužina liste celih brojeva pomoću prilagođene funkcije je: 9999998
Kao što se vidi, length_hint
je najbrži (3.0621886253356934e-06) kada radimo sa velikim brojem podataka. To je zato što CPython koristi naznake dužine koje su omotači pisani u Pythonu.
Analiza performansi za malu listu:
import timeit # za testiranje vremena izvršavanja import operator def iterable_count(iterable): length = 0 for item in iterable: length+=1 return length integer_list = list(range(1, 100)) # provera dužine pomoću len() start_time = timeit.default_timer() len_length = len(integer_list) print(timeit.default_timer() - start_time, 'Dužina liste celih brojeva pomoću len() je: ',len_length) # provera dužine pomoću operator.length_hint start_time = timeit.default_timer() len_length = operator.length_hint(integer_list) print(timeit.default_timer() - start_time, 'Dužina liste celih brojeva pomoću length_hint je: ',len_length) start_time = timeit.default_timer() iterable_count_length = iterable_count(integer_list) print(timeit.default_timer() - start_time, 'Dužina liste celih brojeva pomoću prilagođene funkcije je: ',iterable_count_length)
Izlaz:
7.813796401023865e-07 Dužina liste celih brojeva pomoću len() je: 99 1.1278316378593445e-06 Dužina liste celih brojeva pomoću length_hint je: 99 3.462657332420349e-06 Dužina liste celih brojeva pomoću prilagođene funkcije je: 99
U slučaju manje količine podataka, funkcija len()
se pokazuje najbržom (7.813796401023865e-07).
U oba slučaja, naša prilagođena funkcija sa brojačem je sporija u poređenju sa preostale dve metode.
Zaključak
U ovom članku smo analizirali različite metode za određivanje dužine liste, kao i njihovu efikasnost.