Blog JSystems - uwalniamy wiedzę!
Blog JSystems - uwalniamy wiedzę!

W praktyce programisty często zdarza się sytuacja w której na podstawie zawartości jednej listy tworzysz inną listę, często filtrując na podstawie zawartości. Przyjrzyjmy się jak to można zrobić przy pomocy dotychczas znanych metod i porównajmy to z zastosowaniem list składanych.
Naszym celem jest na podstawie 20 liczb w zakresie 1-20 wygenerować listę elementów parzystych z tego zbioru. Przede wszystkim potrzebujemy tej źródłowej listy:
liczby=[]
for x in range(1,21): liczby.append(x)
print(liczby)
Nasz zestaw danych wejściowych wygląda tak:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
Sprawdźmy jak wybralibyśmy z tej listy liczby parzyste i dodali je do innej listy dotychczas znanymi metodami:
parzyste=[]
for i in liczby:
if(i%2==0):
parzyste.append(i)
print(parzyste)
Jest to jakiś sposób, ale też jest sposób krótszy z użyciem list składanych właśnie:
parzyste=[i for i in liczby if i%2==0]
print(parzyste)
Skutek działania powyższego kodu jest taki sam jak tego poprzedniego. Co tu się stało? Zmienna "i" reprezentuje każdy element listy podanej w klauzuli "in liczby". Czyli i to po prostu kolejne liczby z naszej listy liczb. Tak więc zapis:
parzyste=[i for i in liczby]
oznaczałby przypisanie do nowej listy o nazwie "parzyste" wszystkich liczb ze zbioru "liczby". Konstrukcja "for i in liczby" powinna Ci już byc znana. Oznacza ona "dla każdego elementu i ze zbioru liczby". Co oznacza to "i" przed "for"? Tutaj określamy co ma trafić do listy docelowej - czy źródłowy element, czy też może w jakiś sposób przetworzony. Rozważmy taki przykład:
parzyste=[i for i in liczby]
print(parzyste)
Sprawdzenie zawartości listy "parzyste" pokazuje nam tę samą zawartość co w liście "liczby":
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
Zmodyfikujemy teraz nieco nasz kod:
parzyste=[i*10 for i in liczby]
print(parzyste)
Sprawdźmy co teraz znajduje się na liście "parzyste":
[10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200]
Co tu się stało? Na początku klazuli zamiast "i for i in" jest "i*10 for i in". Pojawiło się dodatkowe mnożenie. Jak widzimy, do listy docelowej trafiły elementy z listy pierwotnej pomnożone przez 10. Taką właśnie funkcję spełnia element przed "for". Pozwala Ci na jakieś modyfikacje elementów które trafiają do docelowej listy. To może być cokolwiek - mnożenie jak tu, jakaś unifikacja tekstów czy zastosowanie dowolnej innej funkcji która ma zadziałać na elemencie zanim ten trafi do docelowej listy.
Połączmy to teraz i wyjaśnijmy krok po kroku:
parzyste=[i for i in liczby if i%2==0]
print(parzyste)
A teraz całość razem: "Stwórz listę 'parzyste' do której trafią elementy i bez żadnej modyfikacji z listy 'liczby', które spełniają warunek podzielności przez 2 bez reszty" :) Skoro już tak dobrze się bawimy, to przeróbmy cały nasz kod dalej:
liczby=[]
for x in range(1,21): liczby.append(x)
print(liczby)
parzyste=[i*10 for i in liczby if i%2==0]
print(parzyste)
Na ten moment wygląda to tak... czyli paskudnie. Skoro już wiemy jak działają listy składane, to postarajmy się to maksymalnie skrócić. Zacznijmy od stworzenia listy liczb w określonym zakresie za pomocą list składanych. Zamiast zapisu:
liczby=[]
for x in range(1,21): liczby.append(x)
Zapiszmy to tak:
liczby=[i for i in range(1,21)]
Co się stało się? Stworzyłem listę 'liczby' do której przypisałem bez żadnej modyfikacji elementy z zakresu 1-20. Idźmy krok dalej. Skoro zależy mi na tym by po prostu wyświetlić listę liczb parzystych w określonym zakresie, to wcale nie potrzebuję 2 list, nazywania ich i ich przepisywania. Równie dobrze mogę zrobić to tak:
print( [i for i in range(1,21) if i%2==0] )
Czyż Python nie jest piękny? :)
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...