{"id":1456,"date":"2026-04-01T12:30:04","date_gmt":"2026-04-01T10:30:04","guid":{"rendered":"https:\/\/trzykody.pl\/?p=1456"},"modified":"2026-04-25T12:38:49","modified_gmt":"2026-04-25T10:38:49","slug":"filter-filtruje-elementy-iterowalne-wedlug-funkcji-warunkowej","status":"publish","type":"post","link":"https:\/\/trzykody.pl\/index.php\/2026\/04\/01\/filter-filtruje-elementy-iterowalne-wedlug-funkcji-warunkowej\/","title":{"rendered":"Filter \u2013 filtruje elementy iterowalne wed\u0142ug funkcji warunkowej"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Praca z danymi bardzo rzadko polega na wykorzystaniu ca\u0142ego zbioru element\u00f3w. Znacznie cz\u0119\u015bciej potrzebne jest wybranie tylko tych warto\u015bci, kt\u00f3re spe\u0142niaj\u0105 okre\u015blony warunek: liczby dodatnie, u\u017cytkownicy aktywni w ostatnich 30 dniach, zam\u00f3wienia powy\u017cej 1000 z\u0142 albo pliki wi\u0119ksze ni\u017c 50 MB. Taki proces nazywa si\u0119 filtrowaniem i jest jedn\u0105 z podstawowych operacji w programowaniu, analizie danych oraz algorytmice. <\/p>\n\n\n\n<div class=\"wp-block-rank-math-toc-block\" id=\"rank-math-toc\"><h2>Spis Tre\u015bci<\/h2><nav><ol><li><a href=\"#filter-filtruje-elementy-iterowalne-wedlug-funkcji-warunkowej-i-opiera-sie-na-funkcji-zwracajacej-wartosc-logiczna\">Filter \u2013 filtruje elementy iterowalne wed\u0142ug funkcji warunkowej i opiera si\u0119 na funkcji zwracaj\u0105cej warto\u015b\u0107 logiczn\u0105<\/a><\/li><li><a href=\"#roznica-miedzy-filtrowaniem-mapowaniem-i-redukcja-oraz-dlaczego-te-operacje-czesto-sa-mylone\">R\u00f3\u017cnica mi\u0119dzy filtrowaniem, mapowaniem i redukcj\u0105 oraz dlaczego te operacje cz\u0119sto s\u0105 mylone<\/a><ol><li><a href=\"#filter\">Filter<\/a><\/li><li><a href=\"#map\">Map<\/a><\/li><li><a href=\"#reduce\">Reduce<\/a><\/li><\/ol><\/li><li><a href=\"#filter-filtruje-elementy-iterowalne-wedlug-funkcji-warunkowej-w-pythonie-i-zwraca-iterator-zamiast-gotowej-listy\">Filter \u2013 filtruje elementy iterowalne wed\u0142ug funkcji warunkowej w Pythonie i zwraca iterator zamiast gotowej listy<\/a><\/li><li><a href=\"#praktyczne-zastosowanie-filtrowania-danych-tekstowych-pustych-wartosci-i-blednych-rekordow-wejsciowych\">Praktyczne zastosowanie filtrowania danych tekstowych, pustych warto\u015bci i b\u0142\u0119dnych rekord\u00f3w wej\u015bciowych<\/a><\/li><li><a href=\"#implementacja-filtrowania-w-c-przy-uzyciu-tablic-i-recznego-zarzadzania-pamiecia\">Implementacja filtrowania w C przy u\u017cyciu tablic i r\u0119cznego zarz\u0105dzania pami\u0119ci\u0105<\/a><\/li><li><a href=\"#implementacja-w-c-z-wykorzystaniem-standardowej-biblioteki-i-algorytmu-copy-if\">Implementacja w C++ z wykorzystaniem standardowej biblioteki i algorytmu copy_if<\/a><\/li><li><a href=\"#filtrowanie-tablic-w-php-przy-uzyciu-array-filter-i-kontrola-wartosci-pustych\">Filtrowanie tablic w PHP przy u\u017cyciu array_filter i kontrola warto\u015bci pustych<\/a><\/li><li><a href=\"#filter-filtruje-elementy-iterowalne-wedlug-funkcji-warunkowej-takze-w-pracy-z-bazami-danych-i-zapytaniami-sql\">Filter \u2013 filtruje elementy iterowalne wed\u0142ug funkcji warunkowej tak\u017ce w pracy z bazami danych i zapytaniami SQL<\/a><\/li><li><a href=\"#najczestsze-bledy-podczas-uzywania-filtrow-i-sytuacje-ktore-powoduja-problemy-produkcyjne\">Najcz\u0119stsze b\u0142\u0119dy podczas u\u017cywania filtr\u00f3w i sytuacje, kt\u00f3re powoduj\u0105 problemy produkcyjne<\/a><ol><li><a href=\"#uzycie-filtra-zamiast-mapy\">U\u017cycie filtra zamiast mapy<\/a><\/li><li><a href=\"#zapomnienie-o-konwersji-iteratora-w-pythonie\">Zapomnienie o konwersji iteratora w Pythonie<\/a><\/li><li><a href=\"#usuwanie-poprawnych-wartosci-typu-zero\">Usuwanie poprawnych warto\u015bci typu zero<\/a><\/li><li><a href=\"#zbyt-skomplikowany-predykat\">Zbyt skomplikowany predykat<\/a><\/li><li><a href=\"#filtrowanie-po-stronie-aplikacji-zamiast-bazy-danych\">Filtrowanie po stronie aplikacji zamiast bazy danych<\/a><\/li><\/ol><\/li><li><a href=\"#faq\">FAQ<\/a><ol><li><a href=\"#czy-filter-zawsze-tworzy-nowa-kolekcje\">Czy filter zawsze tworzy now\u0105 kolekcj\u0119?<\/a><\/li><li><a href=\"#czy-mozna-filtrowac-obiekty-a-nie-tylko-liczby\">Czy mo\u017cna filtrowa\u0107 obiekty, a nie tylko liczby?<\/a><\/li><li><a href=\"#czy-lambda-jest-zawsze-lepsza-od-zwyklej-funkcji\">Czy lambda jest zawsze lepsza od zwyk\u0142ej funkcji?<\/a><\/li><li><a href=\"#czy-filter-jest-szybszy-niz-petla-for\">Czy filter jest szybszy ni\u017c p\u0119tla for?<\/a><\/li><li><a href=\"#czy-mozna-laczyc-filter-z-map\">Czy mo\u017cna \u0142\u0105czy\u0107 filter z map?<\/a><\/li><\/ol><\/li><li><a href=\"#krotkie-zakonczenie\">Kr\u00f3tkie zako\u0144czenie<\/a><\/li><\/ol><\/nav><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Mechanizm ten wyst\u0119puje praktycznie wsz\u0119dzie: w Pythonie jako funkcja wbudowana, w C++ jako wzorzec iteracyjny lub algorytm ze standardowej biblioteki, w PHP podczas pracy z tablicami, a tak\u017ce w bazach danych w postaci klauzuli WHERE. Idea pozostaje identyczna \u2014 dla ka\u017cdego elementu sprawdzany jest warunek logiczny, a wynik decyduje o tym, czy element zostaje zachowany.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dobrze rozumiane filtrowanie skraca kod, zmniejsza liczb\u0119 b\u0142\u0119d\u00f3w i poprawia czytelno\u015b\u0107 programu. \u0179le u\u017cywane prowadzi do niepotrzebnego kopiowania danych, spadku wydajno\u015bci albo trudnych do wykrycia b\u0142\u0119d\u00f3w logicznych.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"filter-filtruje-elementy-iterowalne-wedlug-funkcji-warunkowej-i-opiera-sie-na-funkcji-zwracajacej-wartosc-logiczna\">Filter \u2013 filtruje elementy iterowalne wed\u0142ug funkcji warunkowej i opiera si\u0119 na funkcji zwracaj\u0105cej warto\u015b\u0107 logiczn\u0105<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Najprostsza definicja jest taka: filtr przechodzi po kolejnych elementach kolekcji i dla ka\u017cdego wykonuje funkcj\u0119 warunkow\u0105.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Je\u017celi wynik tej funkcji jest prawdziwy (<code>True<\/code>, warto\u015b\u0107 niezerowa, warunek spe\u0142niony), element zostaje zachowany.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Je\u017celi wynik jest fa\u0142szywy (<code>False<\/code>, <code>0<\/code>, <code>NULL<\/code>, warunek niespe\u0142niony), element jest odrzucany.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Formalnie mo\u017cna to zapisa\u0107 jako:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Zapis matematyczny<\/th><th>Znaczenie<\/th><\/tr><\/thead><tbody><tr><td>F(A) = {x \u2208 A : P(x)}<\/td><td>ze zbioru A wybierane s\u0105 tylko te elementy x, dla kt\u00f3rych predykat P(x) jest prawdziwy<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Tutaj:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>A<\/code> \u2014 zbi\u00f3r wej\u015bciowy<\/li>\n\n\n\n<li><code>P(x)<\/code> \u2014 funkcja warunkowa (predykat)<\/li>\n\n\n\n<li><code>F(A)<\/code> \u2014 wynik filtrowania<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad prosty:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">lista wej\u015bciowa:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>[1, 2, 3, 4, 5, 6]<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">warunek:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>x % 2 == 0<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">wynik:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>[2, 4, 6]<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To w\u0142a\u015bnie podstawowa idea dzia\u0142ania filtra.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">W praktyce funkcja warunkowa mo\u017ce by\u0107:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>prostym por\u00f3wnaniem<\/li>\n\n\n\n<li>sprawdzeniem typu<\/li>\n\n\n\n<li>walidacj\u0105 danych<\/li>\n\n\n\n<li>kontrol\u0105 zakresu warto\u015bci<\/li>\n\n\n\n<li>testem logicznym z\u0142o\u017conym z wielu warunk\u00f3w<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Im bardziej z\u0142o\u017cony system, tym wi\u0119ksze znaczenie ma poprawne filtrowanie danych wej\u015bciowych.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"roznica-miedzy-filtrowaniem-mapowaniem-i-redukcja-oraz-dlaczego-te-operacje-czesto-sa-mylone\">R\u00f3\u017cnica mi\u0119dzy filtrowaniem, mapowaniem i redukcj\u0105 oraz dlaczego te operacje cz\u0119sto s\u0105 mylone<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Bardzo cz\u0119sto pocz\u0105tkuj\u0105cy myl\u0105 trzy operacje:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>filter<\/li>\n\n\n\n<li>map<\/li>\n\n\n\n<li>reduce<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">To trzy r\u00f3\u017cne rzeczy.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Operacja<\/th><th>Cel<\/th><\/tr><\/thead><tbody><tr><td>Filter<\/td><td>wybiera tylko cz\u0119\u015b\u0107 element\u00f3w<\/td><\/tr><tr><td>Map<\/td><td>przekszta\u0142ca ka\u017cdy element<\/td><\/tr><tr><td>Reduce<\/td><td>sprowadza wiele element\u00f3w do jednej warto\u015bci<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">lista:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>[1, 2, 3, 4]<\/code><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"filter\">Filter<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">wyb\u00f3r liczb parzystych:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">wynik:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>[2, 4]<\/code><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"map\">Map<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">pomno\u017cenie ka\u017cdego elementu przez 2:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">wynik:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>[2, 4, 6, 8]<\/code><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"reduce\">Reduce<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">suma wszystkich element\u00f3w:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">wynik:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>10<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To rozr\u00f3\u017cnienie jest wa\u017cne, bo b\u0142\u0119dne u\u017cycie filtra prowadzi do kodu, kt\u00f3ry dzia\u0142a niepoprawnie logicznie.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Filter nie zmienia warto\u015bci elementu &#8211; tylko decyduje, czy element zostaje.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"filter-filtruje-elementy-iterowalne-wedlug-funkcji-warunkowej-w-pythonie-i-zwraca-iterator-zamiast-gotowej-listy\">Filter \u2013 filtruje elementy iterowalne wed\u0142ug funkcji warunkowej w Pythonie i zwraca iterator zamiast gotowej listy<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">W Pythonie funkcja <code>filter()<\/code> jest funkcj\u0105 wbudowan\u0105.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sk\u0142adnia:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Kod<\/th><th>Znaczenie<\/th><\/tr><\/thead><tbody><tr><td>filter(function, iterable)<\/td><td>filtruje elementy iterowalne<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Parametry:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>function<\/code> \u2014 funkcja warunkowa<\/li>\n\n\n\n<li><code>iterable<\/code> \u2014 obiekt iterowalny (lista, krotka, zbi\u00f3r, generator)<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Wa\u017cna rzecz:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>filter()<\/code> nie zwraca listy.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Zwraca iterator.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To oznacza, \u017ce wynik trzeba zwykle zamieni\u0107 na list\u0119:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Python<\/th><th>Przyk\u0142ad<\/th><\/tr><\/thead><tbody><tr><td>&#8222;`python<\/td><td><\/td><\/tr><tr><td>liczby = [1, 2, 3, 4, 5, 6]<\/td><td><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">def parzysta(x):<br>return x % 2 == 0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">wynik = list(filter(parzysta, liczby))<br>print(wynik)<br>&#8222;` | wynik: <code>[2, 4, 6]<\/code> |<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mo\u017cna te\u017c u\u017cy\u0107 funkcji lambda:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Python<\/th><th>Przyk\u0142ad<\/th><\/tr><\/thead><tbody><tr><td>&#8222;`python<\/td><td><\/td><\/tr><tr><td>liczby = [10, 15, 20, 25]<\/td><td><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">wynik = list(filter(lambda x: x &gt; 15, liczby))<br>print(wynik)<br>&#8222;` | wynik: <code>[20, 25]<\/code> |<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Lambda jest wygodna dla prostych warunk\u00f3w, ale przy wi\u0119kszej logice lepiej stosowa\u0107 zwyk\u0142\u0105 funkcj\u0119.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Czytelno\u015b\u0107 jest wa\u017cniejsza ni\u017c skr\u00f3cenie kodu o dwie linie.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"praktyczne-zastosowanie-filtrowania-danych-tekstowych-pustych-wartosci-i-blednych-rekordow-wejsciowych\">Praktyczne zastosowanie filtrowania danych tekstowych, pustych warto\u015bci i b\u0142\u0119dnych rekord\u00f3w wej\u015bciowych<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">W realnych projektach najcz\u0119\u015bciej filtruje si\u0119 dane nieidealne.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">lista u\u017cytkownik\u00f3w:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">[\"Anna\", \"\", None, \"Jan\", \" \", \"Kasia\"]<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Chcemy usun\u0105\u0107:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>puste stringi<\/li>\n\n\n\n<li><code>None<\/code><\/li>\n\n\n\n<li>string zawieraj\u0105cy tylko spacje<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Python<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>&#8222;`python<\/td><td><\/td><\/tr><tr><td>dane = [&#8222;Anna&#8221;, &#8222;&#8221;, None, &#8222;Jan&#8221;, &#8221; &#8222;, &#8222;Kasia&#8221;]<\/td><td><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">def poprawne(x):<br>return x is not None and x.strip() != &#8222;&#8221;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">wynik = list(filter(poprawne, dane))<br>print(wynik)<br>&#8222;` | wynik: <code>['Anna', 'Jan', 'Kasia']<\/code> |<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To jest realny przypadek z formularzy, import\u00f3w CSV i integracji API.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Brak takiego filtrowania powoduje p\u00f3\u017aniej b\u0142\u0119dy w raportach, logice biznesowej i bazach danych.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"implementacja-filtrowania-w-c-przy-uzyciu-tablic-i-recznego-zarzadzania-pamiecia\">Implementacja filtrowania w C przy u\u017cyciu tablic i r\u0119cznego zarz\u0105dzania pami\u0119ci\u0105<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">W j\u0119zyku C nie istnieje gotowa funkcja <code>filter()<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Trzeba wykona\u0107 to r\u0119cznie:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>przej\u015b\u0107 po tablicy<\/li>\n\n\n\n<li>sprawdzi\u0107 warunek<\/li>\n\n\n\n<li>zapisa\u0107 poprawne elementy do nowej tablicy<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>C<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>&#8222;`c<\/td><td><\/td><\/tr><tr><td>#include &lt;stdio.h&gt;<\/td><td><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">int main() {<br>int dane[] = {1, 2, 3, 4, 5, 6};<br>int wynik[6];<br>int i, j = 0;<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">for(i = 0; i &lt; 6; i++) {<br>    if(dane[i] % 2 == 0) {<br>        wynik[j] = dane[i];<br>        j++;<br>    }<br>}for(i = 0; i &lt; j; i++) {<br>    printf(\"%d \", wynik[i]);<br>}return 0;<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">}<br>&#8222;` | wynik: <code>2 4 6<\/code> |<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tutaj programista sam kontroluje:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>rozmiar tablicy<\/li>\n\n\n\n<li>liczb\u0119 poprawnych element\u00f3w<\/li>\n\n\n\n<li>pami\u0119\u0107<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">To daje wi\u0119ksz\u0105 kontrol\u0119, ale zwi\u0119ksza ryzyko b\u0142\u0119d\u00f3w.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Najcz\u0119stszy problem:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">przepe\u0142nienie bufora albo b\u0142\u0119dne liczenie rozmiaru wynikowej tablicy.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"implementacja-w-c-z-wykorzystaniem-standardowej-biblioteki-i-algorytmu-copy-if\">Implementacja w C++ z wykorzystaniem standardowej biblioteki i algorytmu copy_if<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">W C++ standardowa biblioteka upraszcza ten proces.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Najcz\u0119\u015bciej u\u017cywa si\u0119:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>std::copy_if<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>C++<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>&#8222;`cpp<\/td><td><\/td><\/tr><tr><td>#include &lt;iostream&gt;<\/td><td><\/td><\/tr><tr><td>#include &lt;vector&gt;<\/td><td><\/td><\/tr><tr><td>#include &lt;algorithm&gt;<\/td><td><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">using namespace std;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">int main() {<br>vector&lt;int&gt; dane = {1, 2, 3, 4, 5, 6};<br>vector&lt;int&gt; wynik;<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">copy_if(dane.begin(), dane.end(),<br>        back_inserter(wynik),<br>        [](int x) {<br>            return x % 2 == 0;<br>        });for(int x : wynik) {<br>    cout &lt;&lt; x &lt;&lt; \" \";<br>}return 0;<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">}<br>&#8222;` | wynik: <code>2 4 6<\/code> |<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To rozwi\u0105zanie jest:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>bezpieczniejsze<\/li>\n\n\n\n<li>kr\u00f3tsze<\/li>\n\n\n\n<li>bardziej czytelne<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">i zwykle preferowane w praktyce.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"filtrowanie-tablic-w-php-przy-uzyciu-array-filter-i-kontrola-wartosci-pustych\">Filtrowanie tablic w PHP przy u\u017cyciu array_filter i kontrola warto\u015bci pustych<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">W PHP odpowiednikiem jest:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>array_filter()<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>PHP<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>&#8222;`php<\/td><td><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">&lt;?php $dane = [1, 2, 3, 4, 5, 6]; $wynik = array_filter($dane, function($x) { return $x % 2 == 0; }); print_r($wynik); ?&gt;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&#8222;` | wynik: <code>2, 4, 6<\/code> |<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Wa\u017cna pu\u0142apka:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">je\u017celi nie podamy funkcji warunkowej, PHP usuwa warto\u015bci uznawane za \u201epuste\u201d:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>0<\/code><\/li>\n\n\n\n<li><code>false<\/code><\/li>\n\n\n\n<li><code>\"\"<\/code><\/li>\n\n\n\n<li><code>null<\/code><\/li>\n\n\n\n<li><code>[]<\/code><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">To bywa \u017ar\u00f3d\u0142em trudnych b\u0142\u0119d\u00f3w.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>0<\/code> mo\u017ce by\u0107 poprawn\u0105 warto\u015bci\u0105 biznesow\u0105, a zostanie usuni\u0119te.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dlatego warto jawnie definiowa\u0107 warunek.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"filter-filtruje-elementy-iterowalne-wedlug-funkcji-warunkowej-takze-w-pracy-z-bazami-danych-i-zapytaniami-sql\">Filter \u2013 filtruje elementy iterowalne wed\u0142ug funkcji warunkowej tak\u017ce w pracy z bazami danych i zapytaniami SQL<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">SQL r\u00f3wnie\u017c realizuje filtrowanie.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tam odpowiada za to:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>WHERE<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>SQL<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>&#8222;`sql<\/td><td><\/td><\/tr><tr><td>SELECT *<\/td><td><\/td><\/tr><tr><td>FROM zamowienia<\/td><td><\/td><\/tr><tr><td>WHERE kwota &gt; 1000;<\/td><td><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<pre class=\"wp-block-preformatted\">To nadal jest ten sam mechanizm.Dla ka\u017cdego rekordu sprawdzany jest warunek:`kwota > 1000`i tylko cz\u0119\u015b\u0107 danych trafia do wyniku.Bardzo wa\u017cna zasada praktyczna:lepiej filtrowa\u0107 dane w bazie ni\u017c po pobraniu ich do aplikacji.Dlaczego:- mniej transferu danych<br>- mniejsze zu\u017cycie pami\u0119ci<br>- szybsze dzia\u0142anie<br>- mniejsze obci\u0105\u017cenie aplikacji Pobranie miliona rekord\u00f3w po to, \u017ceby w Pythonie wybra\u0107 1000 poprawnych, jest zwykle z\u0142ym rozwi\u0105zaniem.---## Z\u0142o\u017cono\u015b\u0107 obliczeniowa filtrowania i wp\u0142yw na wydajno\u015b\u0107 przy du\u017cych zbiorach danych Najcz\u0119\u015bciej filtr dzia\u0142a w czasie:| Z\u0142o\u017cono\u015b\u0107 | Znaczenie |<br>|---|---|<br>| O(n) | trzeba sprawdzi\u0107 ka\u017cdy element |Je\u017celi mamy:1 000 000 rekord\u00f3wto warunek zostanie wykonany milion razy.Dlatego znaczenie ma:- koszt pojedynczego warunku<br>- liczba operacji wewn\u0105trz predykatu<br>- dost\u0119p do dysku lub sieci w warunku Bardzo z\u0142y przyk\u0142ad:```python<br>filter(lambda x: zapytanie_do_API(x), dane)<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Je\u017celi ka\u017cde sprawdzenie wykonuje \u017c\u0105danie sieciowe, program staje si\u0119 dramatycznie wolny.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Predykat powinien by\u0107:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>szybki<\/li>\n\n\n\n<li>prosty<\/li>\n\n\n\n<li>deterministyczny<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">najlepiej oparty na danych ju\u017c dost\u0119pnych w pami\u0119ci.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"najczestsze-bledy-podczas-uzywania-filtrow-i-sytuacje-ktore-powoduja-problemy-produkcyjne\">Najcz\u0119stsze b\u0142\u0119dy podczas u\u017cywania filtr\u00f3w i sytuacje, kt\u00f3re powoduj\u0105 problemy produkcyjne<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Najcz\u0119stsze b\u0142\u0119dy:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"uzycie-filtra-zamiast-mapy\">U\u017cycie filtra zamiast mapy<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Programista chce zmieni\u0107 warto\u015bci, a nie wybra\u0107 elementy.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To b\u0142\u0105d logiczny.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"zapomnienie-o-konwersji-iteratora-w-pythonie\">Zapomnienie o konwersji iteratora w Pythonie<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">wynik = filter(...)<br>print(wynik)<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">wynik:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">&lt;filter object at ...&gt;<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">zamiast listy.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"usuwanie-poprawnych-wartosci-typu-zero\">Usuwanie poprawnych warto\u015bci typu zero<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Szczeg\u00f3lnie cz\u0119ste w PHP.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"zbyt-skomplikowany-predykat\">Zbyt skomplikowany predykat<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Warunek zajmuje 30 linii.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To sygna\u0142, \u017ce logik\u0119 trzeba wydzieli\u0107 do osobnej funkcji.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"filtrowanie-po-stronie-aplikacji-zamiast-bazy-danych\">Filtrowanie po stronie aplikacji zamiast bazy danych<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Koszt wydajno\u015bciowy potrafi by\u0107 ogromny.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Przy du\u017cych systemach to realne straty czasu i pieni\u0119dzy.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"faq\">FAQ<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"czy-filter-zawsze-tworzy-nowa-kolekcje\">Czy filter zawsze tworzy now\u0105 kolekcj\u0119?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Nie zawsze. W Pythonie zwraca iterator, nie list\u0119. W C cz\u0119sto trzeba samodzielnie stworzy\u0107 now\u0105 tablic\u0119. W SQL wynik jest logicznie nowym zbiorem rekord\u00f3w.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"czy-mozna-filtrowac-obiekty-a-nie-tylko-liczby\">Czy mo\u017cna filtrowa\u0107 obiekty, a nie tylko liczby?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Tak. Bardzo cz\u0119sto filtruje si\u0119 obiekty u\u017cytkownik\u00f3w, zam\u00f3wie\u0144, plik\u00f3w, rekord\u00f3w JSON lub odpowiedzi API.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"czy-lambda-jest-zawsze-lepsza-od-zwyklej-funkcji\">Czy lambda jest zawsze lepsza od zwyk\u0142ej funkcji?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Nie. Dla prostych warunk\u00f3w tak, ale dla bardziej z\u0142o\u017conej logiki zwyk\u0142a funkcja jest czytelniejsza i \u0142atwiejsza w debugowaniu.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"czy-filter-jest-szybszy-niz-petla-for\">Czy filter jest szybszy ni\u017c p\u0119tla for?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Nie zawsze. R\u00f3\u017cnica zale\u017cy od j\u0119zyka i implementacji. Wa\u017cniejsza od mikrooptymalizacji jest czytelno\u015b\u0107 i poprawno\u015b\u0107 logiki.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"czy-mozna-laczyc-filter-z-map\">Czy mo\u017cna \u0142\u0105czy\u0107 filter z map?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Tak, bardzo cz\u0119sto:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">najpierw wyb\u00f3r poprawnych danych, potem ich transformacja.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To standardowy wzorzec pracy z kolekcjami.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"krotkie-zakonczenie\">Kr\u00f3tkie zako\u0144czenie<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Filtrowanie jest jedn\u0105 z najbardziej podstawowych operacji w programowaniu, ale w\u0142a\u015bnie dlatego trzeba je rozumie\u0107 dobrze. To nie jest tylko wygodna funkcja w Pythonie czy metoda w bibliotece standardowej. To spos\u00f3b my\u015blenia o danych &#8211; wybieraniu tego, co naprawd\u0119 potrzebne, i odrzucaniu tego, co tylko obci\u0105\u017ca system. W praktyce poprawnie napisany filtr oszcz\u0119dza pami\u0119\u0107, czas wykonania i bardzo cz\u0119sto godziny p\u00f3\u017aniejszego debugowania.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>\u0179r\u00f3d\u0142o Foto: Freepik<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Praca z danymi bardzo rzadko polega na wykorzystaniu ca\u0142ego zbioru element\u00f3w. Znacznie cz\u0119\u015bciej potrzebne jest wybranie tylko tych warto\u015bci, kt\u00f3re spe\u0142niaj\u0105 okre\u015blony warunek: liczby dodatnie, u\u017cytkownicy aktywni w ostatnich 30 dniach, zam\u00f3wienia powy\u017cej 1000 z\u0142 albo pliki wi\u0119ksze ni\u017c 50 MB. Taki proces nazywa si\u0119 filtrowaniem i jest jedn\u0105 z podstawowych operacji w programowaniu, analizie danych oraz algorytmice. Mechanizm ten wyst\u0119puje praktycznie wsz\u0119dzie: w Pythonie jako funkcja wbudowana, w C++ jako wzorzec iteracyjny lub algorytm ze standardowej biblioteki, w PHP podczas pracy z tablicami, a tak\u017ce w bazach danych w postaci klauzuli WHERE. Idea pozostaje identyczna \u2014 dla ka\u017cdego elementu sprawdzany jest warunek logiczny, a wynik decyduje o tym, czy element zostaje zachowany. Dobrze rozumiane filtrowanie skraca kod, zmniejsza liczb\u0119 b\u0142\u0119d\u00f3w i poprawia czytelno\u015b\u0107 programu. \u0179le u\u017cywane prowadzi do niepotrzebnego kopiowania danych, spadku wydajno\u015bci albo trudnych do wykrycia b\u0142\u0119d\u00f3w logicznych. Filter \u2013 filtruje elementy iterowalne wed\u0142ug funkcji warunkowej i opiera si\u0119 na funkcji zwracaj\u0105cej warto\u015b\u0107 logiczn\u0105 Najprostsza definicja jest taka: filtr przechodzi po kolejnych elementach kolekcji i dla ka\u017cdego wykonuje funkcj\u0119 warunkow\u0105. Je\u017celi wynik tej funkcji jest prawdziwy (True, warto\u015b\u0107 niezerowa, warunek spe\u0142niony), element zostaje zachowany. Je\u017celi wynik jest fa\u0142szywy (False, 0, NULL, warunek niespe\u0142niony), element jest odrzucany. Formalnie mo\u017cna to zapisa\u0107 jako: Zapis matematyczny Znaczenie F(A) = {x \u2208 A : P(x)} ze zbioru A wybierane s\u0105 tylko te elementy x, dla kt\u00f3rych predykat P(x) jest prawdziwy Tutaj: Przyk\u0142ad prosty: lista wej\u015bciowa: [1, 2, 3, 4, 5, 6] warunek: x % 2 == 0 wynik: [2, 4, 6] To w\u0142a\u015bnie podstawowa idea dzia\u0142ania filtra. W praktyce funkcja warunkowa mo\u017ce by\u0107: Im bardziej z\u0142o\u017cony system, tym wi\u0119ksze znaczenie ma poprawne filtrowanie danych wej\u015bciowych. R\u00f3\u017cnica mi\u0119dzy filtrowaniem, mapowaniem i redukcj\u0105 oraz dlaczego te operacje cz\u0119sto s\u0105 mylone Bardzo cz\u0119sto pocz\u0105tkuj\u0105cy myl\u0105 trzy operacje: To trzy r\u00f3\u017cne rzeczy. Operacja Cel Filter wybiera tylko cz\u0119\u015b\u0107 element\u00f3w Map przekszta\u0142ca ka\u017cdy element Reduce sprowadza wiele element\u00f3w do jednej warto\u015bci Przyk\u0142ad: lista: [1, 2, 3, 4] Filter wyb\u00f3r liczb parzystych: wynik: [2, 4] Map pomno\u017cenie ka\u017cdego elementu przez 2: wynik: [2, 4, 6, 8] Reduce suma wszystkich element\u00f3w: wynik: 10 To rozr\u00f3\u017cnienie jest wa\u017cne, bo b\u0142\u0119dne u\u017cycie filtra prowadzi do kodu, kt\u00f3ry dzia\u0142a niepoprawnie logicznie. Filter nie zmienia warto\u015bci elementu &#8211; tylko decyduje, czy element zostaje. Filter \u2013 filtruje elementy iterowalne wed\u0142ug funkcji warunkowej w Pythonie i zwraca iterator zamiast gotowej listy W Pythonie funkcja filter() jest funkcj\u0105 wbudowan\u0105. Sk\u0142adnia: Kod Znaczenie filter(function, iterable) filtruje elementy iterowalne Parametry: Wa\u017cna rzecz: filter() nie zwraca listy. Zwraca iterator. To oznacza, \u017ce wynik trzeba zwykle zamieni\u0107 na list\u0119: Python Przyk\u0142ad &#8222;`python liczby = [1, 2, 3, 4, 5, 6] def parzysta(x):return x % 2 == 0 wynik = list(filter(parzysta, liczby))print(wynik)&#8222;` | wynik: [2, 4, 6] | Mo\u017cna te\u017c u\u017cy\u0107 funkcji lambda: Python Przyk\u0142ad &#8222;`python liczby = [10, 15, 20, 25] wynik = list(filter(lambda x: x &gt; 15, liczby))print(wynik)&#8222;` | wynik: [20, 25] | Lambda jest wygodna dla prostych warunk\u00f3w, ale przy wi\u0119kszej logice lepiej stosowa\u0107 zwyk\u0142\u0105 funkcj\u0119. Czytelno\u015b\u0107 jest wa\u017cniejsza ni\u017c skr\u00f3cenie kodu o dwie linie. Praktyczne zastosowanie filtrowania danych tekstowych, pustych warto\u015bci i b\u0142\u0119dnych rekord\u00f3w wej\u015bciowych W realnych projektach najcz\u0119\u015bciej filtruje si\u0119 dane nieidealne. Przyk\u0142ad: lista u\u017cytkownik\u00f3w: [&#8222;Anna&#8221;, &#8222;&#8221;, None, &#8222;Jan&#8221;, &#8221; &#8222;, &#8222;Kasia&#8221;] Chcemy usun\u0105\u0107: Przyk\u0142ad: Python Kod &#8222;`python dane = [&#8222;Anna&#8221;, &#8222;&#8221;, None, &#8222;Jan&#8221;, &#8221; &#8222;, &#8222;Kasia&#8221;] def poprawne(x):return x is not None and x.strip() != &#8222;&#8221; wynik = list(filter(poprawne, dane))print(wynik)&#8222;` | wynik: [&#8217;Anna&#8217;, 'Jan&#8217;, 'Kasia&#8217;] | To jest realny przypadek z formularzy, import\u00f3w CSV i integracji API. Brak takiego filtrowania powoduje p\u00f3\u017aniej b\u0142\u0119dy w raportach, logice biznesowej i bazach danych. Implementacja filtrowania w C przy u\u017cyciu tablic i r\u0119cznego zarz\u0105dzania pami\u0119ci\u0105 W j\u0119zyku C nie istnieje gotowa funkcja filter(). Trzeba wykona\u0107 to r\u0119cznie: Przyk\u0142ad: C Kod &#8222;`c #include &lt;stdio.h&gt; int main() {int dane[] = {1, 2, 3, 4, 5, 6};int wynik[6];int i, j = 0; for(i = 0; i &lt; 6; i++) { if(dane[i] % 2 == 0) { wynik[j] = dane[i]; j++; }}for(i = 0; i &lt; j; i++) { printf(&#8222;%d &#8222;, wynik[i]);}return 0; }&#8222;` | wynik: 2 4 6 | Tutaj programista sam kontroluje: To daje wi\u0119ksz\u0105 kontrol\u0119, ale zwi\u0119ksza ryzyko b\u0142\u0119d\u00f3w. Najcz\u0119stszy problem: przepe\u0142nienie bufora albo b\u0142\u0119dne liczenie rozmiaru wynikowej tablicy. Implementacja w C++ z wykorzystaniem standardowej biblioteki i algorytmu copy_if W C++ standardowa biblioteka upraszcza ten proces. Najcz\u0119\u015bciej u\u017cywa si\u0119: std::copy_if Przyk\u0142ad: C++ Kod &#8222;`cpp #include &lt;iostream&gt; #include &lt;vector&gt; #include &lt;algorithm&gt; using namespace std; int main() {vector&lt;int&gt; dane = {1, 2, 3, 4, 5, 6};vector&lt;int&gt; wynik; copy_if(dane.begin(), dane.end(), back_inserter(wynik), [](int x) { return x % 2 == 0; });for(int x : wynik) { cout &lt;&lt; x &lt;&lt; &#8221; &#8222;;}return 0; }&#8222;` | wynik: 2 4 6 | To rozwi\u0105zanie jest: i zwykle preferowane w praktyce. Filtrowanie tablic w PHP przy u\u017cyciu array_filter i kontrola warto\u015bci pustych W PHP odpowiednikiem jest: array_filter() Przyk\u0142ad: PHP Kod &#8222;`php &lt;?php $dane = [1, 2, 3, 4, 5, 6]; $wynik = array_filter($dane, function($x) { return $x % 2 == 0; }); print_r($wynik); ?&gt; &#8222;` | wynik: 2, 4, 6 | Wa\u017cna pu\u0142apka: je\u017celi nie podamy funkcji warunkowej, PHP usuwa warto\u015bci uznawane za \u201epuste\u201d: To bywa \u017ar\u00f3d\u0142em trudnych b\u0142\u0119d\u00f3w. Przyk\u0142ad: 0 mo\u017ce by\u0107 poprawn\u0105 warto\u015bci\u0105 biznesow\u0105, a zostanie usuni\u0119te. Dlatego warto jawnie definiowa\u0107 warunek. Filter \u2013 filtruje elementy iterowalne wed\u0142ug funkcji warunkowej tak\u017ce w pracy z bazami danych i zapytaniami SQL SQL r\u00f3wnie\u017c realizuje filtrowanie. Tam odpowiada za to: WHERE Przyk\u0142ad: SQL Kod &#8222;`sql SELECT * FROM zamowienia WHERE kwota &gt; 1000; To nadal jest ten sam mechanizm.Dla ka\u017cdego rekordu sprawdzany jest warunek:`kwota > 1000`i tylko cz\u0119\u015b\u0107 danych trafia do wyniku.Bardzo wa\u017cna zasada praktyczna:lepiej filtrowa\u0107 dane w bazie ni\u017c po pobraniu ich do aplikacji.Dlaczego:- mniej transferu danych- mniejsze zu\u017cycie pami\u0119ci- szybsze dzia\u0142anie- mniejsze obci\u0105\u017cenie aplikacji Pobranie miliona rekord\u00f3w po to, \u017ceby w Pythonie wybra\u0107 1000 poprawnych, jest zwykle z\u0142ym rozwi\u0105zaniem.&#8212;## Z\u0142o\u017cono\u015b\u0107 obliczeniowa filtrowania i wp\u0142yw na wydajno\u015b\u0107 przy du\u017cych zbiorach danych Najcz\u0119\u015bciej filtr dzia\u0142a w czasie:| Z\u0142o\u017cono\u015b\u0107 | Znaczenie ||&#8212;|&#8212;|| O(n) | trzeba sprawdzi\u0107 ka\u017cdy element |Je\u017celi mamy:1 000 000 rekord\u00f3wto warunek zostanie wykonany milion razy.Dlatego znaczenie ma:- koszt pojedynczego warunku- liczba operacji wewn\u0105trz predykatu- dost\u0119p do dysku lub sieci w warunku Bardzo z\u0142y przyk\u0142ad:&#8222;`pythonfilter(lambda x: zapytanie_do_API(x), dane) Je\u017celi ka\u017cde sprawdzenie wykonuje \u017c\u0105danie sieciowe, program staje si\u0119 dramatycznie wolny. Predykat powinien by\u0107: najlepiej oparty na danych ju\u017c dost\u0119pnych w pami\u0119ci. Najcz\u0119stsze b\u0142\u0119dy podczas u\u017cywania filtr\u00f3w i sytuacje, kt\u00f3re powoduj\u0105 problemy produkcyjne Najcz\u0119stsze b\u0142\u0119dy: U\u017cycie filtra zamiast mapy Programista chce zmieni\u0107 warto\u015bci, a nie wybra\u0107 elementy. To b\u0142\u0105d logiczny. Zapomnienie o konwersji iteratora w Pythonie wynik = filter(&#8230;)print(wynik) wynik: &lt;filter object at &#8230;&gt; zamiast listy. Usuwanie poprawnych warto\u015bci typu zero Szczeg\u00f3lnie cz\u0119ste w PHP. Zbyt skomplikowany predykat Warunek zajmuje 30 linii. To sygna\u0142, \u017ce logik\u0119 trzeba wydzieli\u0107 do osobnej funkcji. Filtrowanie po stronie aplikacji zamiast bazy danych Koszt wydajno\u015bciowy potrafi by\u0107 ogromny. Przy du\u017cych systemach to realne straty czasu i pieni\u0119dzy. FAQ Czy filter zawsze tworzy now\u0105 kolekcj\u0119? Nie zawsze. W Pythonie zwraca iterator, nie list\u0119. W C cz\u0119sto trzeba samodzielnie stworzy\u0107 now\u0105 tablic\u0119. W SQL wynik jest logicznie nowym zbiorem rekord\u00f3w. Czy mo\u017cna filtrowa\u0107 obiekty, a nie tylko liczby? Tak. Bardzo cz\u0119sto filtruje si\u0119 obiekty u\u017cytkownik\u00f3w, zam\u00f3wie\u0144, plik\u00f3w, rekord\u00f3w JSON lub odpowiedzi API. Czy lambda jest zawsze lepsza od zwyk\u0142ej funkcji? Nie. Dla prostych warunk\u00f3w tak, ale dla bardziej z\u0142o\u017conej logiki zwyk\u0142a funkcja jest czytelniejsza i \u0142atwiejsza w debugowaniu. Czy filter jest szybszy ni\u017c p\u0119tla for? Nie zawsze. R\u00f3\u017cnica zale\u017cy od j\u0119zyka i implementacji. Wa\u017cniejsza od mikrooptymalizacji jest czytelno\u015b\u0107 i poprawno\u015b\u0107 logiki. Czy mo\u017cna \u0142\u0105czy\u0107 filter z map? Tak, bardzo cz\u0119sto: najpierw wyb\u00f3r poprawnych danych, potem ich transformacja. To standardowy wzorzec pracy z kolekcjami. Kr\u00f3tkie zako\u0144czenie Filtrowanie jest jedn\u0105 z najbardziej podstawowych operacji w programowaniu, ale w\u0142a\u015bnie dlatego trzeba je rozumie\u0107 dobrze. To nie jest tylko wygodna funkcja w Pythonie czy metoda w bibliotece standardowej. To spos\u00f3b my\u015blenia o danych &#8211; wybieraniu tego, co naprawd\u0119 potrzebne, i odrzucaniu tego, co tylko obci\u0105\u017ca system. W praktyce poprawnie napisany filtr oszcz\u0119dza pami\u0119\u0107, czas wykonania i bardzo cz\u0119sto godziny p\u00f3\u017aniejszego debugowania. \u0179r\u00f3d\u0142o Foto: Freepik<\/p>\n","protected":false},"author":1,"featured_media":1457,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[27],"tags":[],"class_list":["post-1456","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-jezyk-programowania"],"_links":{"self":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/posts\/1456","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/comments?post=1456"}],"version-history":[{"count":1,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/posts\/1456\/revisions"}],"predecessor-version":[{"id":1458,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/posts\/1456\/revisions\/1458"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/media\/1457"}],"wp:attachment":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/media?parent=1456"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/categories?post=1456"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/tags?post=1456"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}