Brzo kreiranje i kompresovanje lista

17.5 Brzo kreiranje i kompresovanje lista 

Kao što lambda komanda može da nam na brz i jednostavan način kreira neku funkciju, tako postoji i način da se na brzinu kreiraju nove liste, koje su na neki način povezane sa nekom listom koja već postoji u negde u našem programu. Ovaj način kreiranja i kompresovanja lista se naziva list comprehension. Pretpostavimo da imamo listu brojeva i da želimo da kreiramo drugu listu koja će sadržavati brojeve iz prve liste koji su pomnoženi sa brojem 2, ali, samo ako je broj iz prve liste veći od 2:
>>> prva = [1, 2, 3, 4, 5] 
>>> druga = [2 * i for i in prva if i > 2] 
>>> print(druga) 
[6, 8, 10] 
>>> 
Vidimo kako smo na brzinu kreirali novu listu tako što smo naveli koju (ili kakvu) operaciju želimo da izvršimo sa elementima prve liste (u našem slučaju to je 2 * i for i in prva), što smo propratili sa uslovom koji mora da bude zadovoljen (u našem slučaju je to if i > 2). Zapamti da sa ovom operacijom originalna lista ostaje nepromenjena, tj mi je ni na koji način nismo ugrozili ovim postupkom.
Prednosti korišćenja ove metode za liste su: velika brzina kreiranja nove liste i smanjivanje dužine programa (jer bi smo u suprotnom morali da pišemo petlju koja bi obrađivala svaki elemenat iz prve liste i tako dobijen rezultata dodavala u novu listu.
Slična metoda se može primeniti na bilo koji drugi promenljivi tip objekata u Pythonu (rečnici, skupovi itd):
>>> prva = {1:'a', 2:'b', 3:'c', 4:'d', 5:'e'} 
>>> druga = {2 * i:0 for i in prva if i > 2} 
>>> print(druga) 
{8: 0, 10: 0, 6: 0} 
>>> 
Ali, ukoliko koristimo neki nepromenljivi tip objekata dobijamo čudan rezultat:
>>> prva = (1, 2, 3, 4, 5) 
>>> druga = (2 * i for i in prva if i > 2) 
>>> print(druga) 
<generator object <genexpr> at 0xb70886e4> 
Ako si zapamtio šta su generatori (oni nam vraćaju jednu vrednost u jednom trenu) ovo nije nikakvo „čudo neviđeno“, jer možemo prosto da:
>>> for i in druga: 
...     print(i) 
... 
6 
8 
10 
Vidimo da je metoda kompresovanja prilično korisna, i da nam mnogo može pomoći prilikom rada, pogotovo što je mnogo brža u odnosu na neke druge solucije.

17.4 lambda funkcije Indeks 17.6 Neobični argumenti
funkcija

Коментари

Popularno

Tehnički problemi (i ostala tehnička čudesa) u najavi (i u bliskoj istoriji)

Izvršavanje Python programa

Vredela si svakoga stiha

Izbor uređivača teksta (Editora)

Kreiranje izvorne datoteke

Prevelika očekivanja

Strip o Brus Liju?

Matematički izrazi (ekspresije) u naše programu

Parametri i argumenti funkcija