Objašnjenje Python popisa razumijevanja: kada ih koristiti, a kada ne (2026)
Razumijevanje popisa jedna je od Pythonovih značajki koje se najčešće pogrešno shvaćaju. Početnici ih izbjegavaju jer "izgledaju komplicirano". Posrednici ih prekomjerno koriste sve dok svaki treći redak ne bude ugniježđeni jednolinijski redak koji nitko ne može čitati. Ovaj vodič ispravlja obje pogreške.
Pokrit ćemo: točan trodijelni oblik koji slijedi svako razumijevanje popisa, mjerila u odnosu na za / mapu / filtar, četiri uzorka koja biste trebali prepoznati na prvi pogled i čvrsto pravilo kada prestati koristiti razumijevanje i umjesto toga posegnuti za običnom petljom.
Oblik: [ što | izvor | filter ]
Svako razumijevanje popisa sastoji se od tri dijela, ovim redoslijedom:
Čitanje naglas: "daj mi `izraz` za svaku `stavku` u `iterable`, ali samo kada je `uvjet` istinit."
Započnite s ekvivalentnom for petljom, a zatim je skupite:
Isti rezultat — [0, 4, 16, 36, 64]. Razumijevanje je jedan redak, alocira popis naprijed (bez poziva append), a Pythonov kompajler bajtkoda emitira LIST_APPEND — brzi put koji preskače traženje atributa na .append.
Referentna vrijednost: razumijevanje vs for-loop vs map+filter
Izrada popisa parnih brojeva na kvadrat od 0 do 100 000:
| Metoda | Vrijeme (µs) | Relativni |
|---|---|---|
| za + .dodaj | 4 800 | 1,9× osnovna linija |
| popis(mapa(..., filter(...))) | 3 200 | 1,3× osnovna linija |
| Razumijevanje popisa | 2500 | 1.0× (najbrži) |
Mjereno na Pythonu 3.13, jednokratno pokretanje od 1000 ponavljanja. Razumijevanje pobjeđuje jer nema poziva funkcije po elementu — izraz je ugrađen.
To znači: nemojte mikrooptimizirati. Za popis od 100 elemenata, sva tri se dovršavaju za manje od 100µs. Prvo odaberite čitljivost.
Četiri uzorka koja biste trebali prepoznati
1. Transformirajte svaki element
Umetnuta zamjena za map(str.title, names), ali ne treba omotati list(...).
2. Filtriraj bez transformacije
Čistije od "popis(filter(lambda n: n > 0, brojevi))". Nije potrebna "lambda".
3. Filtriraj I transformiraj
Ovo je mjesto gdje su razumijevanja jasno bolja od alternativa - pokušajte to napisati s karta + filtar i prebrojite zagrade.
4. Izravnajte ugniježđeni popis
Redoslijed je bitan: za redak u matrici čita se slijeva nadesno kao ekvivalentne ugniježđene za petlje. Ovo je jedini obrazac gdje ugniježđena razumijevanja ostaju čitljiva — sve dublje treba petlju.
Kada PRESTATI koristiti razumijevanje
Tri teška pravila, poredana po važnosti:
1. Tri ili više klauzula `za` → koristite petlju. Trostruko ugniježđeno razumijevanje nečitljivo je čak ni osobi koja ga je napisala prije 20 minuta.
2. Nuspojave → koristite petlju. Shvaćanja su za sastavljanje popisa. Ako pozivate funkciju zbog njezinih nuspojava (pisanje u datoteku, slanje zahtjeva), upotrijebite petlju. [ispis(x) za x u stavkama] miris je koda — stvarate popis za bacanje Ništa.
3. Izraz je duži od 60 znakova → rastavite ga. Ako trebate razmišljati više od 3 sekunde da biste ga raščlanili, podijelite ga u imenovanu funkciju ili petlju.
Dict i skup razumijevanja — isti oblik
Ista sintaksa, različite zagrade:
Dict razumijevanja posebno su korisna za okretanje preslikavanja ({v: k za k, v u d.items()}) ili izradu tablice pretraživanja iz popisa.
Generator izraza — bratić koji je spreman za pamćenje
Izbacite zagrade, zadržite zagrade:
Za sum, min, max, any, all, ", ".join(...) i druge funkcije koje ponavljaju jednom, preferirajte izraz generatora — on sprema posrednu dodjelu popisa. Za sve što trebate dvaput indeksirati ili ponavljati, upotrijebite razumijevanje.
Praksa: tri vježbe
Prepišite svaki koristeći razumijevanje popisa. Rješenja su na kraju.
1. Zadane su words = ["cat", "elephant", "dog", "hippopotamus"], dobijte popis riječi dužih od 4 znaka, sve velikim slovima.
2. S obzirom na data = [{"name": "Alice", "age": 30}, {"name": "Bob", "age": 25}], izvucite popis samo imena.
3. Zadani su parovi = [(1, 2), (3, 4), (5, 6)], dohvatite popis zbrojeva svakog para.
Rješenja:
Razumijevanje popisa prepoznatljiva je značajka Pythona — znati kada posegnuti za jednim (a kada ga ostaviti kao petlju za) pouzdan je pokazatelj srednje razine tečnosti. Vježbajte prepisivanjem postojećih petlji for + .append koje pronađete u vlastitom kodu; ne bi svaki trebao postati razumijevanje, ali oni koji bi trebali bit će očiti nakon tjedan dana.
Sljedeći korak: isprobajte 5 interaktivnih lekcija o razumijevanju popisa sa pravim Pythonom koji radi u vašem pregledniku i AI mentorom na svakom koraku.