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 ovog meseca

Gde pronaći novosti sa facebook stranica nakon velike promene koja ga je zadesila?

Dva načina da vratite svoj Windows 10 na fabričke vrednosti

Kako preuzeti video koji je neko postavio na facebook-u bez upotrebe dodatnih programa?

Više neće biti moguć besplatan prelazak na Windows 10

Prijateljski meč ŠK "Titel" - ŠK "Bukovac"

Tu je novi Qt creator 4.4.0!

Kako manipulisati Windows licencom pomoću slmgr komande?

Fake poet

Da li je poželjno biti anoniman na internetu (ili se predstavljati punim imenom i prezimenom)?

Organizacija foldera i fajlova u Linux fajl sistemu