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

Primjedbe

Popularno

Kako televizija štetno utiče na Vaše zdravlje finansije?

Da li je TV kviz Slagalica "prevara"?

Tu je novi Qt creator 4.4.0!

Kada prijatelji odlaze

Microsoft objavio - nova verzija Windowsa stiže...

Opet su se pojavili lažni kuponi brenda "IDEA" na društvenim mrežama

Najgore obrade velikih rock hitova

Sitnije promene na blogu...

Poslednji pozdrav izgubljenom vremenu

Prevelika očekivanja