Comprehension pravi kolekciju dok prolazi kroz podatke.
Obična for petlja je često najjasniji početak. Kada petlja ima jedan usmeren zadatak — da napravi kolekciju — comprehension može da izrazi istu ideju u jednoj čitljivoj liniji.
numbers = [1, 2, 3, 4]
squares = []
for number in numbers:
squares.append(number * number)
# The same focused transformation:
squares = [number * number for number in numbers]Obe verzije prolaze kroz svaki number i dodaju njegov kvadrat u novu listu. Comprehension drži izraz rezultata, promenljivu petlje i izvorne podatke zajedno.
print(squares) # [1, 4, 9, 16]Zagrade biraju tip rezultata: [] pravi listu, {} sa jednim izrazom pravi skup, a {key: value} pravi rečnik.
Čitljivost je na prvom mestu: Koristite običnu petlju kada posao traži više koraka, više sporednih efekata ili dug ugnježden uslov. Kratka comprehension treba da olakša, a ne oteža čitanje koda.
names = ["ana", "marko", "jelena"]
uppercase_names = [name.upper() for name in names]
words = ["Python", "practice", "Python"]
initials = {word[0].lower() for word in words}
scores = {"Ana": 82, "Marko": 45, "Jelena": 91}
passed_scores = {name: score for name, score in scores.items() if score >= 60}Prva linija pretvara svako ime u listu. Druga čuva jedinstvena početna slova u skupu. Poslednja u rečniku čuva samo parove imena i poena učenika koji su položili.
prices = [100, 250, 80]
with_tax = [price * 1.2 for price in prices]Izraz pre for je vrednost koja se dodaje za svaku cenu.
cities = ["Novi Sad", "Niš", "Novi Sad"]
lengths = {len(city) for city in cities}Skup uklanja duplirane rezultate. Nemojte ga koristiti kada je redosled prikaza važan.
words = ["python", "code"]
word_lengths = {word: len(word) for word in words}Stavite ključ i vrednost pre for. Ponovljeni ključevi zamenjuju raniju vrednost, zato pažljivo birajte ključeve.
Čitajte comprehension zdesna nalevo
- 1. Počnite od izvora
for name, score in scores.items()daje po jedan par imena i poena. - 2. Izaberite izraz rezultata
name,score * 1.2iliname: scoreopisuju šta doprinosi jedna iteracija. - 3. Dodajte opcioni filter
if score >= 60zadržava samo iteracije koje ispunjavaju uslov; ne pokrećeelsegranu. - 4. Proverite spoljne zagradeUglaste zagrade prave listu, vitičaste zagrade prave skup, a
key: valueunutar vitičastih zagrada pravi rečnik.
Česte greške
- Biranje pogrešne kolekcijeKoristite listu za uređene rezultate, skup za jedinstvene vrednosti i rečnik kada svakoj vrednosti treba smislen ključ.
- Očekivanje redosleda skupaSkupovi su korisni za jedinstvenost, a ne za predvidiv redosled prikaza.
- Slučajno ponavljanje ključa rečnikaKasnija vrednost za isti ključ zamenjuje raniju.
- Skrivanje previše posla u jednoj linijiAko liniju morate više puta da objašnjavate, radije koristite običnu petlju sa imenovanim međuvrednostima.
