Проверите дужину листе у Питхон-у у 3 једноставна корака

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.