Kada radite sa Python iterabilnim objektima, često je potrebno utvrditi koliko stavki oni sadrže. U ovom tekstu, istražićemo kako koristiti ugrađenu Python funkciju za određivanje dužine iterabilnog objekta, i još mnogo toga.
Python nudi razne ugrađene strukture podataka, kao i metode za rad sa njima. Pored toga, postoje ugrađene funkcije koje olakšavaju manipulaciju tim strukturama. Jedna od takvih funkcija je len()
, koja nam daje broj elemenata u datom iterabilnom objektu.
U ovom vodiču ćemo naučiti kako koristiti funkciju len()
sa listama, tuple-ima, stringovima i drugim strukturama podataka. Takođe ćemo razmotriti nekoliko praktičnih primera njene primene.
Krenimo! 👩🏫
Sintaksa funkcije len()
u Pythonu
Sintaksa za korišćenje Python funkcije len()
je sledeća:
len(iterable)
Kao što vidite, funkcija len()
prima jedan parametar, a to je bilo koji važeći iterabilni objekat. Najčešće su to liste, tuple-i ili stringovi, ali može biti i bilo koji drugi važeći tip.
Sintaksa je, kao što vidite, vrlo jednostavna. Hajde da sada pređemo na neke praktične primere.
📑 Za potrebe kodiranja primera u ovom vodiču, možete koristiti Python REPL (interaktivno okruženje).
Korišćenje funkcije len()
sa iterabilnim objektima
Sa sekvencama
Funkciju len()
možemo koristiti da saznamo dužinu sekvenci, kao što su liste, tuple-i i stringovi.
Evo nekoliko primera:
>>> nums = [9,3,6,1,2] >>> len(nums) 5 >>> nums_tup = (9,3,6,1,2) >>> len(nums_tup) 5
Kod ovih struktura podataka koje čuvaju sekvence, obično se elementima pristupa preko njihovog indeksa ili se izdvaja podsekvenca.
Sa ostalim kolekcijama
Funkciju len()
možemo koristiti i sa drugim Python kolekcijama, kao što su skupovi (setovi) i rečnici.
Ove strukture podataka predstavljaju neuređene kolekcije. Iako redosled elemenata možda nije bitan, korisno je znati ukupan broj stavki u kolekciji.
>>> nums_set = set(nums) >>> len(nums_set) 5 >>> prices = {'Notebook':5,'Pencil case':7,'Bookmarks':3,'Pens':1,'Markers':8} >>> len(prices) 5
Uobičajene primene funkcije len()
u Pythonu
Do sada smo videli jednostavne primere korišćenja funkcije len()
za dobijanje broja stavki u iterabilnom objektu. Sada ćemo pogledati gde se to može koristiti u praksi.
#1. Iteracija pomoću for petlji
Python for
petlja omogućava prolazak kroz iterabilne objekte, pri čemu se u svakom koraku petlje pristupa samoj stavki. Ali ako želimo da pristupimo indeksu svake stavke, ili i indeksu i samoj stavci zajedno, možemo koristiti funkciju range()
, kao što je prikazano:
>>> nums = [9,2,4,7,8] >>> for i in range(len(nums)): ... print(f"Index {i}: {nums[i]}")
Pošto range(N)
daje niz celih brojeva 0, 1, 2, …, N – 1, korišćenjem range(len(nums))
dobijamo skup validnih indeksa kroz koje možemo proći.
# Output Index 0: 9 Index 1: 2 Index 2: 4 Index 3: 7 Index 4: 8
Međutim, preporučeni Pythonovski način za pristup i indeksu i elementu je korišćenje funkcije enumerate
:
>>> nums = [9,2,4,7,8] >>> for idx,num in enumerate(nums): ... print(f"Index {idx}: {num}")
# Output Index 0: 9 Index 1: 2 Index 2: 4 Index 3: 7 Index 4: 8
#2. Uslovno ponavljanje pomoću while petlji
Pretpostavimo da imamo listu brojeva. Metod pop()
uklanja poslednji element iz liste i vraća ga.
Sve dok je dužina liste brojeva (len(nums)
) veća od nule – to jest, dok postoji bar jedan element koji se može ukloniti – petlja će se izvršavati.
>>> nums = [9,2,4,7,8] >>> while len(nums) > 0: ... nums.pop()
# Output 8 7 4 2 9
Gornji primer je eksplicitniji način pisanja sledećeg:
>>> nums = [9,2,4,7,8] >>> while nums: ... nums.pop()
while nums:
je ekvivalentno uslovu „dok lista brojeva nije prazna“.
#3. Provera i validacija dužine iterabilnog objekta
Još jedna česta primena funkcije len
je provera i validacija dužine određenih iterabilnih objekata.
Ovde proveravamo da li je korisničko ime validan string, na osnovu njegove dužine (izračunate pomoću funkcije len()
):
>>> username = "another-random-user" >>> if len(username) > 10: ... print("Korisničko ime je predugačko; trebalo bi da ima najviše 10 karaktera.") ... elif len(username) < 5: ... print("Korisničko ime je prekratko; trebalo bi da ima najmanje 5 karaktera.") ... else: ... print("Validno korisničko ime!")
Korisničko ime je predugačko; trebalo bi da ima najviše 10 karaktera.
#4. Liste i rečnički izrazi
Izrazi u Pythonu omogućavaju sažetu sintaksu za kreiranje novih iterabilnih objekata od postojećih. U izrazima možemo koristiti ugrađene funkcije.
List Comprehensions
U ovom izrazu za generisanje liste, koristimo funkciju len()
da dobijemo dužinu svakog stringa sa liste jezika.
>>> languages = ['Python','C','Rust','JavaScript'] >>> len_langs = [len(lang) for lang in languages] >>> len_langs [6, 1, 4, 10]
Dictionary Comprehensions
U ovom izrazu za generisanje rečnika, koristimo listu jezika i funkciju len()
kako bismo kreirali rečnik:
>>> languages = ['Python','C','Rust','JavaScript'] >>> lang_len = {lang:len(lang) for lang in languages} >>> lang_len {'Python': 6, 'C': 1, 'Rust': 4, 'JavaScript': 10}
Ovde su ključevi i vrednosti nizovi jezika i njihove dužine, redom.
#5. Ključni parametar u prilagođenom sortiranju
Python ima ugrađeni metod sort()
za sortiranje Python lista na licu mesta i funkciju sorted()
za sortiranje listi i drugih iterabilnih objekata.
U oba slučaja, možemo koristiti ključni parametar da bismo prilagodili sortiranje.
Ovde sortiramo listu jezika na osnovu dužine stringa.
>>> languages = ['Python','C','Rust','JavaScript'] >>> languages.sort(key=len) >>> languages ['C', 'Rust', 'Python', 'JavaScript']
U sledećem isječku, koristimo funkciju sorted()
da bismo dobili sortiranu listu.
>>> languages = ['Hindi','English','German','French'] >>> sorted(languages,key=len) ['Hindi', 'German', 'French', 'English']
U ovom primeru, i „German“ i „French“ imaju po 6 karaktera. Pošto funkcija sorted()
obavlja stabilno sortiranje, redosled u originalnoj listi je sačuvan.
#6. Dužina NumPy nizova
Funkciju len()
možemo koristiti i sa drugim strukturama podataka, kao što su NumPy nizovi.
>>> import numpy as np >>> np_array = np.array([3,4,6,9]) >>> type(np_array) <class 'numpy.ndarray'> >>> len(np_array) 4
U ovom slučaju, np_array
je vektor sa 4 elementa. Prema tome, len(np_array)
vraća 4, što je broj elemenata u nizu.
Matrica je dvodimenzionalni niz.
Pogledajmo sledeći primer. len(np_array)
je 2, što je broj redova.
>>> matrix = [[1,2,3],[4,5,6]] >>> np_array = np.array(matrix) >>> np_array array([[1, 2, 3], [4, 5, 6]]) >>> len(np_array) 2
Da bismo razumeli, vratimo se na matricu. Imamo strukturu ugnježdenih lista gde spoljašnja lista sadrži dve ugnježđene liste. Funkcija len()
vraća broj stavki u kontejneru (ovde su to dve liste):
>>> help(len) Help on built-in function len in module builtins: len(obj, /) Return the number of items in a container.
Međutim, kada počnete da radite sa višedimenzionalnim nizovima, preporučuje se korišćenje atributa shape
umesto len()
.
>>> np_array.shape (2, 3)
Uobičajene zamke koje treba izbegavati pri korišćenju Python funkcije len()
.
Da bismo zaključili ovu diskusiju, osvrnućemo se na neke od uobičajenih zamki koje treba izbegavati kada koristimo funkciju len()
u Pythonu.
Korišćenje len()
sa neiterabilnim tipovima podataka
Znamo da funkcija len
prihvata samo važeće iterabilne objekte kao argument. To znači da ako pozovemo funkciju len
sa nevažećim tipom podataka – onim koji nije iterabilan – dobićemo grešku.
Takvi nevažeći tipovi podataka uključuju osnovne tipove podataka kao što su celi brojevi, brojevi sa pokretnim zarezom i boolean vrednosti:
>>> len(2) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: object of type 'int' has no len() >>> len(True) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: object of type 'bool' has no len() >>> len(3.14) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: object of type 'float' has no len()
U Pythonu, generatori su memorijski efikasni izbori za primene koje zahtevaju generisanje sekvence. Objekat generatora vraća elemente niza – na zahtev – jedan po jedan. Ali objekti generatora nemaju dužinu.
Dakle, dobićete grešku ako pokušate da izračunate dužinu objekta generatora:
>>> nums_sq = (i*i for i in range(10)) >>> nums_sq <generator object <genexpr> at 0x0157DBC0> >>> len(nums_sq) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: object of type 'generator' has no len()
Korišćenje len()
sa tuple-ima dužine jedan
Ako samo umetnete element u tuple, Python ga tumači kao jedan element, a ne kao tuple.
Evo primera:
>>> nums = (1) >>> len(nums) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: object of type 'int' has no len()
Dakle, kada imate tuple sa samo jednim elementom, inicijalizujte ga u ovom obliku: tuple_name = (elt, )
kako bi se tumačio kao tuple:
>>> nums = (1,) >>> len(nums) 1
Rezime
Evo kratkog pregleda onoga što smo obradili u ovom vodiču:
- Broj stavki u bilo kom iterabilnom objektu možete saznati pomoću funkcije
len()
u Pythonu. Sintaksa za korišćenje funkcije dužine je:len(bilo_koji_važeći_iterabilni_objekat)
. - Ovo uključuje sekvence kao što su liste, tuple-i i stringovi, kao i druge kolekcije, poput rečnika i skupova.
- Funkcija
len()
se često koristi u petljama i izrazima. - Takođe možete koristiti funkciju
len()
kao ključni parametar kada treba da prilagodite sortiranje prema dužini, na primer: sortiranje liste stringova na osnovu njihove dužine.
Zatim naučite kako koristiti Python-ovu funkciju sum()
.