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 |
0 Коментари
Pokažite nam šta mislite o ovome!