Tri operacije, tri različita zadatka.
map() transformiše svaki element, filter() zadržava samo elemente koji ispunjavaju uslov, a sorted() pravi uređenu listu. U Pythonu 3, map i filter vraćaju iteratore, zato list() često čini njihove rezultate vidljivim.
prices = [100, 200, 300]
discounted = list(map(lambda price: price * 0.9, prices))
print(discounted)map() poziva lambda funkciju za svaku cenu. list() sakuplja njen iterator u [90.0, 180.0, 270.0]; prices ostaje nepromenjen.
[90.0, 180.0, 270.0]filter() zadržava originalne elemente čiji je uslov tačan. sorted() vraća novu listu, dok list.sort() menja listu na mestu i vraća None.
Izaberite najjasniji oblik: Comprehension je često lakši za čitanje kod male transformacije ili filtriranja. map() i filter() su korisni kada već imate funkciju koju želite da prosledite.
scores = [45, 82, 67, 91, 38]
passed = list(filter(lambda score: score >= 60, scores))
products = [{"name": "Mouse", "price": 20}, {"name": "Keyboard", "price": 45}, {"name": "Monitor", "price": 180}]
ordered = sorted(products, key=lambda product: product["price"], reverse=True)
numbers = [1, 2, 3, 4, 5]
with_map = list(map(lambda n: n * 2, numbers))
with_comprehension = [n * 2 for n in numbers]filter() vraća prolazne rezultate bez njihove promene. sorted() može da koristi reverse=True za opadajući redosled i stabilan je: jednaki ključevi zadržavaju prvobitni redosled.
available = filter(lambda product: product["price"] >= 50, products)
discounted = map(lambda product: product["price"] * 0.9, available)filter odlučuje koji proizvodi nastavljaju dalje. map() zatim menja samo njihove cene.
ordered = sorted(products, key=lambda product: product["price"])sorted() ostavlja products nepromenjenim. Koristite .sort() samo kada namerno želite da promenite tu istu listu.
Pratite tok obrade podataka
- 1. Počnite od originalnih podatakaPočnite malom kolekcijom vrednosti ili rečnika.
- 2. filter() biraNjegova funkcija vraća True za elemente koji ostaju.
- 3. map() transformišeNjegova funkcija vraća novu vrednost za svaki preostali element.
- 4. sorted() uređujeVraća novu listu u rastućem redosledu, osim ako se koristi reverse=True.
Česte greške
- Očekivanje da map() bude listaObavijte map() ili filter() funkcijom list() kada vam je potrebna lista za ispis ili ponovnu upotrebu.
- Mešanje izbora i transformacijefilter() zadržava originalne elemente; map() pravi transformisane vrednosti.
- Očekivanje da sorted() menja listusorted() vraća novu listu. list.sort() menja listu i vraća None.
- Pravljenje jednog dugog lancaDajte imena međurezultatima kada ugnežđavanje map(), filter() i lambda funkcija čini kod teškim za čitanje.
