W tym poście omówimy trzy metody filtrowania list w Pythonie. Konkretnie, przejdziemy przez to, jak używać rozumienia listy, wyrażeń generatora i wbudowanej metody 'filter()' do filtrowania list w Pythonie.
Zacznijmy!
Załóżmy, że mamy dane na liście i chcemy wyodrębnić wartości lub zredukować listę na podstawie pewnych kryteriów. Konkretnie, rozważmy następującą listę, która zawiera listę opłat medycznych z pewnymi brakującymi wartościami:
medical_charges =
print(medical_charges)

Na początek, możemy użyć list comprehension, aby odfiltrować wartości 'None':
medical_charges =
print(medical_charges)

Możemy również przekonwertować elementy listy na liczby całkowite, zmieniając nieco sposób rozumienia listy:
medical_charges =
print(medical_charges)

Po przekonwertowaniu każdego elementu na liczbę całkowitą, możemy również filtrować na podstawie wielkości każdej liczby całkowitej. Załóżmy, że chcemy zachować opłaty większe lub równe 500$, możemy napisać następującą listę comprehension:
medical_charges =
print(medical_charges)

FILTROWANIE Z WYKORZYSTANIEM GENERATORÓW
Jeśli mamy do czynienia ze znaczną ilością danych, co często ma miejsce w przypadku dokumentacji medycznej, możemy filtrować iteracyjnie używając wyrażenia generatora. Jeśli chcemy przekonwertować naszą oryginalną listę za pomocą wyrażenia generatora, wykonujemy następujące czynności :
charges = (int(n) for n in medical_charges if n != None)
print(charges)

Główna różnica w składni, od zrozumienia listy, jest użycie nawiasów zamiast nawiasów kwadratowych. Możemy teraz iterować po generatorze:
for charge in charges:
print(charge)

FILTROWANIE WYKORZYSTANIE METOD 'LIST()' I 'FILTER()'
Czasami zdarza się, że kryteria filtrowania nie mogą być łatwo wyrażone za pomocą list comprehension lub wyrażeń generatora. Rozważmy przykład konwersji naszej oryginalnej listy opłat medycznych na liczby całkowite i usunięcia brakujących wartości:
medical_charges =
Możemy zdefiniować funkcję, która pobierze listę i spróbuje przekonwertować każdy element na liczbę całkowitą. Gdy konwersja nie wyrzuca żadnych błędów, zwracamy wartość true. Kiedy konwersja wyrzuca błąd wartości, używamy instrukcji except, aby złapać błąd i zwrócić false:
def convert_and_filter(input_list):
try:
int(input_list)
return True
except ValueError:
return False
Możemy wtedy użyć wbudowanych metod 'filter()' i 'list()'. Funkcja 'filter()’tworzy iterator, a metoda 'list()' pozwala nam na stworzenie listy wyników:
charges = list(filter(convert_and_filter, medical_charges))
print(charges)
Przestanę tutaj, ale nie krępuj się bawić powyższymi przykładami. Na przykład, możesz spróbować zmienić warunki filtrowania w przykładzie z rozumieniem listy, aby zawierały tylko opłaty mniejsze lub równe 500$.