A comprehension (értelmezés vagy tömör kifejezés) a Python egyik legstílusosabb eszköze. Lehetővé teszi, hogy egy meglévő sorozatból (lista, szótár) egyetlen sorban hozzunk létre egy újat, miközben transzformációt vagy szűrést végzünk az adatokon. Olyan, mint egy rövidített for ciklus, amely egyből le is gyártja az eredményhalmazt.
List
Egy új listát hoz létre egy meglévő iterálható objektumból.
Általános forma:
|
1 |
newlist = [expression for item in iterable if condition == True] |
Tehát kapunk egy új listát, az eredeti változatlan marad.
Példák
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# páros számokat emeld négyzetre, és gyűjtsd ki másik listába! # hagyományos módszer szamok = [1,2,3,4,5] negyzetek = [] for i in szamok: if i % 2 == 0: negyzetek.append(i**2) # comprehension - tömör kifejezés negyzetek = [] negyzetek = [i**2 for i in szamok if i % 2 == 0] print(negyzetek) # A-kezdőbetűs stringeket alakítsuk nagybetűsre! nevek = ["Adél", "Nóra", "Aladár", "Béla"] a_nevek = [nev.upper() for nev in nevek if nev.startswith("A")] # a páratlan számok helyett írjuk ki, hogy páratlan, a párosnál magát a számot! eredmeny = [x if x % 2 == 0 else "páratlan" for x in szamok] print (eredmeny) negyzetek = [i**2 for i in szamok if i % 2 == 0and i>0] |
Dictionary
Hasonló a listához, de itt kulcs-érték párokat adunk meg, és kapcsos zárójelet {} használunk.
Példák
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
nevek = ["Anna","Béla", "Géza", "Iza"] szotar = {nev: len(nev) for nev in nevek} print(f"típus: {type(szotar)} " ) # listákból szótár termekek = ["kifli", "tej", "vaj", "kóbász"] arak = [180,400,200,5500] szotar2 = {termek : ar for termek, ar in zip(termekek, arak) } print(szotar2) # számok és négyzeteik szótárba! szamok = [1,2,3,4,5] negyzet_dict = { x : x**2 for x in szamok} print(negyzet_dict) # 10% -os áremelés emelt = {termek : int(ar*1.1) for termek, ar in szotar2.items()} print(emelt) |
Set
A szintaxisa majdnem azonos a szótáréval (szintén {}), de itt nincsenek kettősponttal elválasztott párok, csak egyedi értékek. A halmaz automatikusan kiszűri a duplikációkat.
Példák
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
gyumolcsok = ["alma","körte","barack","citrom","alma"] print(gyumolcsok) kezdoBetuk = {szo[0].upper() for szo in gyumolcsok} print(kezdoBetuk) # Milyen hosszúak a szavak a mondatban? mondat = "Az alma egy finom egészséges gyümölcs." szavak = mondat.split() hossz = [len(szo) for szo in szavak] print(hossz) # 0-99 közötti számok négyzetét elosztjuk 5-tel, és megnézzük milyen maradékok vannak szamok = range(100) maradekok = {(x**2) % 5 for x in szamok} print(maradekok) |
