Blog JSystems - uwalniamy wiedzę!
Blog JSystems - uwalniamy wiedzę!
map() i filter(), w skrócie
Przekształcenie i filtrowanie listy:
liczby = [1, 2, 3, 4]
kwadraty = list(map(lambda x: x**2, liczby))
parzyste = list(filter(lambda x: x % 2 == 0, liczby))

Funkcja "map" służy do stosowania funkcji na każdym z elementów listy. Poniższy kod powoduje przetworzenie listy "liczby" w taki sposób, by do listy "parzyste" trafiły wartości z listy "liczby" pomnożone przez 2.
liczby=[i for i in range(1,11)]
parzyste=list(map(lambda x:x*2,liczby))
print(parzyste)
Wynik działania funkcji:
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
W zasadzie interesować nas będzie tylko jedna linia z kodu:
parzyste=list(map(lambda x:x*2,liczby))
Element list(.......) powoduje oczywiście powstanie listy. Samo wywołanie funkcji map to:
map(lambda x:x*2,liczby)
Do tej funkcji trafiają dwa parametry - funkcja do wykonania (zaraz do tego wrócę) i lista źródłowa. Co oznacza ten tajemniczy zapis?:
lambda x:x*2
Jest to tak zwane wyrażenie lambda. Polega to w skrócie na tym, że możesz podać dynamicznie treść funkcji która ma zostać wykonana. W tym przypadku musimy podać treść funkcji która zostanie wykonana na każdym z elementów listy źródłowej. Zapis "x:" oznacza że ta dynamiczna funkcja przyjmuje jeden parametr, a wewnątrze tej funkcji będę go nazywał "x". Fragment "x*2" określa sposób przetworzenia tego elementu podanego przez parametr, zanim zostanie on zwrócony.
Zasadniczo zapis:
lambda x:x*2
Byłby odpowiednikiem
def funkcja(x):
return x*2
Czyli na każdym elemencie z listy źródłowej zadziała taka funkcja, a element po przetworzeniu trafi do listy docelowej. W zasadzie ten zapis:
parzyste=list(map(lambda x:x*2,liczby))
Jest równoznaczny ze znaną nam już konstrukcją list składanych :
parzyste=[i*2 for i in liczby]
Jeśli przyszło Ci to na myśl, to bardzo dobrze - oznacza to że rozumiesz obie techniki. Owszem - wynik będzie ten sam, natomiast różne są wewnętrzne metody jego osiągnięcia. W zależności od stosowanego przeliczenia i zawartości listy mogą charakteryzować się różną wydajnością.
Co do samych wyrażeń lambda, na razie nie będziemy ich bardziej zgłębiać bo ten poziom zaznajomienia w kontekście list nam w zupełności wystarczy. Przyjrzymy się wyrażeniom lambda w rozdziale w którym omawiam funkcje.
Funkcja filter jak sama nazwa wskazuje, służy do filtrowania zawartości list. Tradycyjnie zaczniemy od przykładu kodu:
liczby=[i for i in range(1,21)]
parzyste=list(filter(lambda x: x%2==0 ,liczby))
print(parzyste)
I równie tradycyjnie sprawdźmy co nam ten kod wydrukował:
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
Istotny jest w zasadzie tylko element:
parzyste=list(filter(lambda x: x%2==0 ,liczby))
Ponieważ po ostatnim niespodziewanym porównaniu funkcji "map" do list składanych Twoja podejrzliwość zapewne nieco wzrosła, to tym razem od razu wyłożę karty na stół:
parzyste=[x for x in liczby if x%2==0]
Tym razem w wyrażeniu lambda oczekuje się od nas warunku logicznego stwierdzającego "prawda" lub "fałsz" dla każdego z filtrowanych elementów. Robi to fragment "x%2==0" dla którego jesteśmy w stanie stwierdzić dla każdego elementu czy podane wyrażenie będzie prawdziwe czy nie. Będzie prawdziwe oczywiście tylko dla liczb parzystych, więc tylko takie trafią do listy docelowej.
Ten kurs daje Ci solidne podstawy Pythona. Jeśli chcesz pójść dalej i pod okiem trenera dojść od pierwszej linijki kodu do własnego modelu uczenia maszynowego, sprawdź nasze pięciodniowe szkolenie Python od podstaw, przez analizę danych, do machine learning. Pierwsze trzy dni to Python w praktyce: typy i kolekcje, instrukcje warunkowe i pętle, funkcje, moduły i pakiety, pliki tekstowe, usługi sieciowe oraz praca z bazą PostgreSQL. Czwarty dzień to analiza danych w pandas (wczytywanie CSV, TSV i XLS, filtrowanie, agregacje, statystyki) i wizualizacja w Matplotlib, Seaborn oraz Plotly. Piąty dzień to uczenie maszynowe w scikit-learn: regresja liniowa i logistyczna, drzewa decyzyjne, las losowy, XGBoost, walidacja predykcji, dobór hiperparametrów i przeciwdziałanie przeuczeniu. Szkolenie ma terminy gwarantowane, czyli odbywa się niezależnie od wielkości grupy.
Szkolenie Python od podstaw, przez analizę danych, do machine learning
To szkolenie może być dofinansowane dla Ciebie z KFS lub BUR.
★★★★★Średnia ocena naszych szkoleń w Google: 5/5
Komentarze (0)
Brak komentarzy...