Új hozzászólás Aktív témák
-
cousin333
addikt
válasz
oszi666
#2659
üzenetére
A lambda alapvetően egyszerű függvények helyett van, ami így nem foglal nevet, és kompaktabbul használható, mert nem kell előtte definiálni és elég egy sort írni. Nyilván nem kell mindig ezt használni, de néha jól jöhet.
Egy példa a pandas modul használatával:
import pandas as pddata = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})Az eredmény egy indexelt "táblázat", oszlop fejlécekkel:
A B
0 1 4
1 2 5
2 3 6Tegyük fel, hogy egy számításhoz minden sorban össze akarom adni az A oszlop köbét és a B oszlop felét. Hogyan lehet ezt megcsinálni? Létezik az apply() metódus, ami soronként, vagy oszloponként végigmegy a táblázaton, és az első argumentumban megadott függvényt futtatja. Az első megoldás, hogy készítünk egy függvényt, majd ezt használjuk:
def process(sor):return sor.A**3 + sor.B / 2data.apply(process, axis=1)Az eredmény:
0 3.0
1 10.5
2 30.0
dtype: float64A megoldás tehát működik, viszont a process mostantól egy foglalt név (vagy felülír egy korábbit) olyasvalamire, amit talán soha többé nem használunk. Ráadásul írtunk 2 extra sort. Ugyanez lambda függvénnyel jóval egyszerűbb:
data.apply(lambda x: x.A**3 + x.B/2, axis=1)A helyzet hasonló a list comprehension-hoz. Azt is meg tudod oldani for ciklussal, de miért írnád azt, hogy
a = [1, 2, 3, 4, 5, 6, 7, 8]b = []for elem in a:if elem % 2 == 0:b.append(elem**2)ha írhatod jóval egyszerűbben (és gyorsabban) is:
a = [1, 2, 3, 4, 5, 6, 7, 8]b = [elem**2 for elem in a if a % 2 == 0]Sőt, utóbbi esetben, ha mondjuk alapvetően csak ezen négyzetszámoknak az összegére vagyunk kíváncsiak, akkor azt is írhatjuk, hogy:
szumma = sum(elem**2 for elem in a if a % 2 == 0)és akkor nem számoltunk ki és tároltunk el feleslegesen egy egész listát.
Új hozzászólás Aktív témák
- Google Pixel 9 Pro Fold - Obsidian - 16/256GB - Megkímélt állapotban - Google Jótállás:2026.12.09-ig
- iPhone 11 Pro Max 256GB 100% (1év Garancia)
- Friss készlet! MacBook Pro 14" M1 16GB RAM 27%-os áfás számla (0349AB)
- Dell Precision 7760 i7-11850H 64 GB RAM NVIDIA RTX A4000 FHD IPS Garancia
- Lenovo X1 Nano 907 Gramm Core i7 1180G7 16Gb Ram 512Gb NVMe Boltból Garanciával Számlával
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest
