{"id":1502,"date":"2026-04-08T14:03:49","date_gmt":"2026-04-08T12:03:49","guid":{"rendered":"https:\/\/trzykody.pl\/?p=1502"},"modified":"2026-04-25T14:04:39","modified_gmt":"2026-04-25T12:04:39","slug":"max-zwraca-najwiekszy-element-w-iterowalnym-zbiorze","status":"publish","type":"post","link":"https:\/\/trzykody.pl\/index.php\/2026\/04\/08\/max-zwraca-najwiekszy-element-w-iterowalnym-zbiorze\/","title":{"rendered":"Max \u2013 zwraca najwi\u0119kszy element w iterowalnym zbiorze"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Praca z danymi iterowalnymi bardzo szybko prowadzi do potrzeby znalezienia warto\u015bci skrajnych. Czasem trzeba wskaza\u0107 najwy\u017csz\u0105 ocen\u0119 w dzienniku, czasem najwi\u0119kszy rozmiar pliku, a czasem rekord o najwy\u017cszym priorytecie w systemie kolejkowym. To pozornie prosty problem, ale spos\u00f3b jego rozwi\u0105zania ma znaczenie dla wydajno\u015bci, bezpiecze\u0144stwa programu i czytelno\u015bci kodu. W praktyce programistycznej takie operacje pojawiaj\u0105 si\u0119 niemal codziennie, szczeg\u00f3lnie podczas analizy danych, przetwarzania list oraz budowy prostych algorytm\u00f3w selekcji. Dobrym przyk\u0142adem tej operacji jest Max \u2013 zwraca najwi\u0119kszy element w iterowalnym zbiorze.<\/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=\"#dlaczego-max-zwraca-najwiekszy-element-w-iterowalnym-zbiorze-jest-jedna-z-podstawowych-operacji-w-pracy-z-danymi\">Dlaczego Max \u2013 zwraca najwi\u0119kszy element w iterowalnym zbiorze jest jedn\u0105 z podstawowych operacji w pracy z danymi<\/a><\/li><li><a href=\"#jak-dziala-porownywanie-wartosci-i-dlaczego-typ-danych-ma-tutaj-realne-znaczenie\">Jak dzia\u0142a por\u00f3wnywanie warto\u015bci i dlaczego typ danych ma tutaj realne znaczenie<\/a><ol><li><a href=\"#liczby\">Liczby<\/a><\/li><li><a href=\"#napisy\">Napisy<\/a><\/li><li><a href=\"#obiekty\">Obiekty<\/a><\/li><\/ol><\/li><li><a href=\"#max-zwraca-najwiekszy-element-w-iterowalnym-zbiorze-na-przykladach-w-pythonie-c-i-c\">Max \u2013 zwraca najwi\u0119kszy element w iterowalnym zbiorze na przyk\u0142adach w Pythonie, C i C++<\/a><ol><li><a href=\"#python-wersja-wbudowana\">Python \u2013 wersja wbudowana<\/a><\/li><li><a href=\"#python-implementacja-reczna\">Python \u2013 implementacja r\u0119czna<\/a><\/li><li><a href=\"#c-podejscie-proceduralne\">C \u2013 podej\u015bcie proceduralne<\/a><\/li><li><a href=\"#c-stl\">C++ \u2013 STL<\/a><\/li><\/ol><\/li><li><a href=\"#problem-pustych-kolekcji-i-dlaczego-ten-blad-pojawia-sie-czesciej-niz-sie-wydaje\">Problem pustych kolekcji i dlaczego ten b\u0142\u0105d pojawia si\u0119 cz\u0119\u015bciej ni\u017c si\u0119 wydaje<\/a><ol><li><a href=\"#python\">Python<\/a><\/li><\/ol><\/li><li><a href=\"#max-zwraca-najwiekszy-element-w-iterowalnym-zbiorze-z-wlasnym-kryterium-porownania\">Max \u2013 zwraca najwi\u0119kszy element w iterowalnym zbiorze z w\u0142asnym kryterium por\u00f3wnania<\/a><ol><li><a href=\"#python-z-parametrem-key\">Python z parametrem key<\/a><\/li><\/ol><\/li><li><a href=\"#roznica-miedzy-szukaniem-maksimum-a-sortowaniem-calego-zbioru\">R\u00f3\u017cnica mi\u0119dzy szukaniem maksimum a sortowaniem ca\u0142ego zbioru<\/a><\/li><li><a href=\"#typowe-pulapki-i-bledy-ktore-psuja-wynik-mimo-pozornie-prostego-kodu\">Typowe pu\u0142apki i b\u0142\u0119dy, kt\u00f3re psuj\u0105 wynik mimo pozornie prostego kodu<\/a><ol><li><a href=\"#zla-inicjalizacja-maksimum\">Z\u0142a inicjalizacja maksimum<\/a><\/li><li><a href=\"#porownywanie-nieporownywalnych-typow\">Por\u00f3wnywanie niepor\u00f3wnywalnych typ\u00f3w<\/a><\/li><li><a href=\"#nieswiadome-porownywanie-napisow-zamiast-liczb\">Nie\u015bwiadome por\u00f3wnywanie napis\u00f3w zamiast liczb<\/a><\/li><\/ol><\/li><li><a href=\"#uwagi-praktyczne-z-codziennej-pracy-programisty\">Uwagi praktyczne z codziennej pracy programisty<\/a><\/li><li><a href=\"#faq\">FAQ<\/a><ol><li><a href=\"#czy-funkcja-maksimum-zawsze-dziala-szybciej-niz-sortowanie\">Czy funkcja maksimum zawsze dzia\u0142a szybciej ni\u017c sortowanie?<\/a><\/li><li><a href=\"#czy-mozna-znalezc-najwiekszy-element-w-generatorze\">Czy mo\u017cna znale\u017a\u0107 najwi\u0119kszy element w generatorze?<\/a><\/li><li><a href=\"#dlaczego-dla-napisow-wynik-bywa-zaskakujacy\">Dlaczego dla napis\u00f3w wynik bywa zaskakuj\u0105cy?<\/a><\/li><li><a href=\"#czy-mozna-znalezc-najwiekszy-element-wedlug-dlugosci-napisu\">Czy mo\u017cna znale\u017a\u0107 najwi\u0119kszy element wed\u0142ug d\u0142ugo\u015bci napisu?<\/a><\/li><li><a href=\"#co-zrobic-gdy-lista-moze-byc-pusta\">Co zrobi\u0107, gdy lista mo\u017ce by\u0107 pusta?<\/a><\/li><li><a href=\"#czy-maksimum-i-element-ostatni-po-sortowaniu-to-zawsze-to-samo\">Czy maksimum i element ostatni po sortowaniu to zawsze to samo?<\/a><\/li><\/ol><\/li><\/ol><\/nav><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"dlaczego-max-zwraca-najwiekszy-element-w-iterowalnym-zbiorze-jest-jedna-z-podstawowych-operacji-w-pracy-z-danymi\">Dlaczego Max \u2013 zwraca najwi\u0119kszy element w iterowalnym zbiorze jest jedn\u0105 z podstawowych operacji w pracy z danymi<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Iterowalny zbi\u00f3r to ka\u017cda struktura, po kt\u00f3rej mo\u017cna przechodzi\u0107 element po elemencie. W Pythonie b\u0119d\u0105 to mi\u0119dzy innymi listy, krotki, zbiory, s\u0142owniki, napisy czy generatory. W C++ podobn\u0105 rol\u0119 pe\u0142ni\u0105 kontenery STL, takie jak <code>vector<\/code>, <code>list<\/code> czy <code>set<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sama idea jest prosta: program przegl\u0105da kolejne elementy i zapami\u0119tuje najwi\u0119kszy napotkany wynik. Po zako\u0144czeniu iteracji zwracana jest warto\u015b\u0107 ko\u0144cowa.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Algorytm klasyczny wygl\u0105da tak:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Pobierz pierwszy element jako aktualne maksimum.<\/li>\n\n\n\n<li>Przejd\u017a po pozosta\u0142ych elementach.<\/li>\n\n\n\n<li>Je\u015bli nowy element jest wi\u0119kszy od aktualnego maksimum, zast\u0105p warto\u015b\u0107.<\/li>\n\n\n\n<li>Po zako\u0144czeniu zwr\u00f3\u0107 wynik.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Z\u0142o\u017cono\u015b\u0107 czasowa wynosi tutaj:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Element analizy<\/th><th>Warto\u015b\u0107<\/th><\/tr><\/thead><tbody><tr><td>Z\u0142o\u017cono\u015b\u0107 czasowa<\/td><td>O(n)<\/td><\/tr><tr><td>Z\u0142o\u017cono\u015b\u0107 pami\u0119ciowa<\/td><td>O(1)<\/td><\/tr><tr><td>Liczba por\u00f3wna\u0144 dla n element\u00f3w<\/td><td>n &#8211; 1<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">To bardzo wa\u017cne: nie da si\u0119 znale\u017a\u0107 maksimum szybciej ni\u017c przez sprawdzenie wszystkich element\u00f3w, je\u015bli dane nie s\u0105 wcze\u015bniej uporz\u0105dkowane lub nie istniej\u0105 dodatkowe informacje o strukturze danych.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dla listy 1 000 000 liczb oznacza to 999 999 por\u00f3wna\u0144. Program wykona to szybko, ale nadal jest to operacja liniowa, wi\u0119c przy du\u017cych zbiorach ma znaczenie.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"jak-dziala-porownywanie-wartosci-i-dlaczego-typ-danych-ma-tutaj-realne-znaczenie\">Jak dzia\u0142a por\u00f3wnywanie warto\u015bci i dlaczego typ danych ma tutaj realne znaczenie<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Nie ka\u017cdy element mo\u017cna por\u00f3wna\u0107 w oczywisty spos\u00f3b. Liczby ca\u0142kowite s\u0105 proste, ale przy napisach, obiektach lub strukturach z\u0142o\u017conych pojawiaj\u0105 si\u0119 wa\u017cne szczeg\u00f3\u0142y.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"liczby\">Liczby<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Dla liczb por\u00f3wnanie jest jednoznaczne.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Dane wej\u015bciowe<\/th><th>Wynik<\/th><\/tr><\/thead><tbody><tr><td><code>[3, 8, 2, 11, 5]<\/code><\/td><td><code>11<\/code><\/td><\/tr><tr><td><code>[-10, -3, -7]<\/code><\/td><td><code>-3<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"napisy\">Napisy<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Napisy por\u00f3wnywane s\u0105 leksykograficznie, czyli wed\u0142ug kolejno\u015bci znak\u00f3w.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Dane wej\u015bciowe<\/th><th>Wynik<\/th><\/tr><\/thead><tbody><tr><td><code>[\"ala\", \"zamek\", \"kot\"]<\/code><\/td><td><code>\"zamek\"<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">To cz\u0119sto zaskakuje pocz\u0105tkuj\u0105cych, bo najwi\u0119kszy napis nie oznacza najd\u0142u\u017cszego napisu.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"obiekty\">Obiekty<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Dla w\u0142asnych struktur trzeba okre\u015bli\u0107 regu\u0142\u0119 por\u00f3wnania. Na przyk\u0142ad student mo\u017ce by\u0107 por\u00f3wnywany wed\u0142ug \u015bredniej ocen, a nie wed\u0142ug nazwiska.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bez tego program mo\u017ce zg\u0142osi\u0107 b\u0142\u0105d lub zachowywa\u0107 si\u0119 nieprzewidywalnie.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"max-zwraca-najwiekszy-element-w-iterowalnym-zbiorze-na-przykladach-w-pythonie-c-i-c\">Max \u2013 zwraca najwi\u0119kszy element w iterowalnym zbiorze na przyk\u0142adach w Pythonie, C i C++<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Python posiada wbudowan\u0105 funkcj\u0119 <code>max()<\/code>, ale dobrze rozumie\u0107 r\u00f3wnie\u017c wersj\u0119 r\u0119czn\u0105.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"python-wersja-wbudowana\">Python \u2013 wersja wbudowana<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>J\u0119zyk<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>Python<\/td><td><code>python\\nliczby = [4, 9, 2, 15, 7]\\nwynik = max(liczby)\\nprint(wynik)\\n<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Wynik:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Dane<\/th><th>Rezultat<\/th><\/tr><\/thead><tbody><tr><td><code>[4, 9, 2, 15, 7]<\/code><\/td><td><code>15<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"python-implementacja-reczna\">Python \u2013 implementacja r\u0119czna<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>J\u0119zyk<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>Python<\/td><td><code>python\\nliczby = [4, 9, 2, 15, 7]\\n\\nmaksimum = liczby[0]\\n\\nfor x in liczby[1:]:\\n if x &gt; maksimum:\\n maksimum = x\\n\\nprint(maksimum)\\n<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Ta wersja dobrze pokazuje mechanik\u0119 dzia\u0142ania.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"c-podejscie-proceduralne\">C \u2013 podej\u015bcie proceduralne<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>J\u0119zyk<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>C<\/td><td><code>c\\n#include &lt;stdio.h&gt;\\n\\nint main() {\\n int tablica[] = {4, 9, 2, 15, 7};\\n int n = 5;\\n int maksimum = tablica[0];\\n\\n for (int i = 1; i &lt; n; i++) {\\n if (tablica[i] &gt; maksimum) {\\n maksimum = tablica[i];\\n }\\n }\\n\\n printf(\\\"%d\\\\n\\\", maksimum);\\n return 0;\\n}\\n<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">W C trzeba samodzielnie pilnowa\u0107 rozmiaru tablicy i inicjalizacji pierwszego elementu.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"c-stl\">C++ \u2013 STL<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>J\u0119zyk<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>C++<\/td><td><code>cpp\\n#include &lt;iostream&gt;\\n#include &lt;vector&gt;\\n#include &lt;algorithm&gt;\\n\\nint main() {\\n std::vector&lt;int&gt; liczby = {4, 9, 2, 15, 7};\\n\\n int wynik = *std::max_element(liczby.begin(), liczby.end());\\n\\n std::cout &lt;&lt; wynik &lt;&lt; std::endl;\\n return 0;\\n}\\n<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Tutaj u\u017cywane jest <code>std::max_element<\/code>, kt\u00f3re zwraca iterator, dlatego potrzebne jest <code>*<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"problem-pustych-kolekcji-i-dlaczego-ten-blad-pojawia-sie-czesciej-niz-sie-wydaje\">Problem pustych kolekcji i dlaczego ten b\u0142\u0105d pojawia si\u0119 cz\u0119\u015bciej ni\u017c si\u0119 wydaje<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Najcz\u0119stszy problem praktyczny to pusta lista.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dla pustego zbioru nie istnieje najwi\u0119kszy element. Matematycznie nie ma czego por\u00f3wnywa\u0107, a programistycznie ko\u0144czy si\u0119 to wyj\u0105tkiem lub b\u0142\u0119dem wykonania.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"python\">Python<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Sytuacja<\/th><th>Efekt<\/th><\/tr><\/thead><tbody><tr><td><code>max([])<\/code><\/td><td><code>ValueError<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Bezpieczniejsze podej\u015bcie:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>J\u0119zyk<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>Python<\/td><td><code>python\\nliczby = []\\n\\nif liczby:\\n print(max(liczby))\\nelse:\\n print(\\\"Brak danych\\\")\\n<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Od nowszych wersji Pythona mo\u017cna te\u017c u\u017cy\u0107 parametru <code>default<\/code>.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>J\u0119zyk<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>Python<\/td><td><code>python\\nliczby = []\\nprint(max(liczby, default=0))\\n<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">To szczeg\u00f3lnie przydatne w raportach, parserach plik\u00f3w i systemach importu danych, gdzie puste kolekcje s\u0105 normalnym przypadkiem.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"max-zwraca-najwiekszy-element-w-iterowalnym-zbiorze-z-wlasnym-kryterium-porownania\">Max \u2013 zwraca najwi\u0119kszy element w iterowalnym zbiorze z w\u0142asnym kryterium por\u00f3wnania<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Cz\u0119sto nie szukamy najwi\u0119kszej warto\u015bci samej w sobie, ale elementu \u201enajlepszego\u201d wed\u0142ug okre\u015blonej cechy.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad: lista student\u00f3w.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Dane<\/th><th>Cel<\/th><\/tr><\/thead><tbody><tr><td>Imi\u0119 + \u015brednia<\/td><td>znale\u017a\u0107 najwy\u017csz\u0105 \u015bredni\u0105<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"python-z-parametrem-key\">Python z parametrem <code>key<\/code><\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>J\u0119zyk<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>Python<\/td><td><code>python\\nstudenci = [\\n (\\\"Anna\\\", 4.2),\\n (\\\"Marek\\\", 4.8),\\n (\\\"Julia\\\", 4.5)\\n]\\n\\nnajlepszy = max(studenci, key=lambda x: x[1])\\nprint(najlepszy)\\n<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Wynik:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Rezultat<\/th><\/tr><\/thead><tbody><tr><td><code>('Marek', 4.8)<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Tutaj por\u00f3wnywany jest drugi element krotki.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To bardzo wa\u017cny mechanizm, bo dzi\u0119ki niemu mo\u017cna wybiera\u0107:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>najwi\u0119kszy plik po rozmiarze<\/li>\n\n\n\n<li>najdro\u017cszy produkt po cenie<\/li>\n\n\n\n<li>najnowszy rekord po dacie<\/li>\n\n\n\n<li>zadanie o najwy\u017cszym priorytecie<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Bez potrzeby r\u0119cznego sortowania ca\u0142ej kolekcji.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"roznica-miedzy-szukaniem-maksimum-a-sortowaniem-calego-zbioru\">R\u00f3\u017cnica mi\u0119dzy szukaniem maksimum a sortowaniem ca\u0142ego zbioru<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">B\u0142\u0105d pocz\u0105tkuj\u0105cych wygl\u0105da tak:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>sortowanie ca\u0142ej listy<\/li>\n\n\n\n<li>pobranie ostatniego elementu<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Technicznie dzia\u0142a, ale jest mniej wydajne.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por\u00f3wnanie:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Operacja<\/th><th>Z\u0142o\u017cono\u015b\u0107<\/th><\/tr><\/thead><tbody><tr><td>znalezienie maksimum<\/td><td>O(n)<\/td><\/tr><tr><td>pe\u0142ne sortowanie<\/td><td>O(n log n)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Dla ma\u0142ej listy r\u00f3\u017cnica mo\u017ce by\u0107 niewidoczna, ale dla milion\u00f3w rekord\u00f3w koszt staje si\u0119 realny.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Je\u015bli potrzebny jest tylko najwi\u0119kszy element, sortowanie ca\u0142ej struktury jest strat\u0105 czasu i zasob\u00f3w.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To cz\u0119sty problem w zadaniach rekrutacyjnych i kodzie produkcyjnym pisanym w po\u015bpiechu.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"typowe-pulapki-i-bledy-ktore-psuja-wynik-mimo-pozornie-prostego-kodu\">Typowe pu\u0142apki i b\u0142\u0119dy, kt\u00f3re psuj\u0105 wynik mimo pozornie prostego kodu<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"zla-inicjalizacja-maksimum\">Z\u0142a inicjalizacja maksimum<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">B\u0142\u0105d:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>J\u0119zyk<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>Python<\/td><td><code>python\\nmaksimum = 0\\n<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Je\u015bli lista zawiera tylko liczby ujemne, wynik b\u0119dzie b\u0142\u0119dny.<\/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>Dane<\/th><th>B\u0142\u0119dny wynik<\/th><\/tr><\/thead><tbody><tr><td><code>[-8, -3, -10]<\/code><\/td><td><code>0<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Poprawnie nale\u017cy u\u017cy\u0107 pierwszego elementu kolekcji.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"porownywanie-nieporownywalnych-typow\">Por\u00f3wnywanie niepor\u00f3wnywalnych typ\u00f3w<\/h3>\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>J\u0119zyk<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>Python<\/td><td><code>python\\nmax([3, \\\"tekst\\\", 7])\\n<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Mo\u017ce zako\u0144czy\u0107 si\u0119 wyj\u0105tkiem, poniewa\u017c typy nie maj\u0105 wsp\u00f3lnej regu\u0142y por\u00f3wnania.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"nieswiadome-porownywanie-napisow-zamiast-liczb\">Nie\u015bwiadome por\u00f3wnywanie napis\u00f3w zamiast liczb<\/h3>\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>Dane wej\u015bciowe<\/th><th>Wynik<\/th><\/tr><\/thead><tbody><tr><td><code>[\"100\", \"20\", \"3\"]<\/code><\/td><td><code>\"3\"<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">To poprawne leksykograficznie, ale b\u0142\u0119dne biznesowo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Najpierw trzeba wykona\u0107 konwersj\u0119:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>J\u0119zyk<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>Python<\/td><td><code>python\\nliczby = list(map(int, [\\\"100\\\", \\\"20\\\", \\\"3\\\"]))\\nprint(max(liczby))\\n<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"uwagi-praktyczne-z-codziennej-pracy-programisty\">Uwagi praktyczne z codziennej pracy programisty<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">W systemach rzeczywistych problem maksimum rzadko wyst\u0119puje jako osobne zadanie. Zwykle jest cz\u0119\u015bci\u0105 wi\u0119kszego procesu:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>analiza log\u00f3w<\/li>\n\n\n\n<li>ranking ofert<\/li>\n\n\n\n<li>selekcja rekord\u00f3w<\/li>\n\n\n\n<li>monitoring wydajno\u015bci<\/li>\n\n\n\n<li>raporty finansowe<\/li>\n\n\n\n<li>systemy alarmowe<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Na przyk\u0142ad serwer mo\u017ce wybiera\u0107 najwi\u0119ksze u\u017cycie pami\u0119ci z ostatnich 24 godzin. B\u0142\u0105d w tej logice mo\u017ce oznacza\u0107 brak alertu i realne straty operacyjne.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dlatego nawet tak prosta operacja powinna by\u0107 traktowana powa\u017cnie:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>sprawdzenie pustych danych<\/li>\n\n\n\n<li>poprawny typ wej\u015bcia<\/li>\n\n\n\n<li>w\u0142a\u015bciwe kryterium por\u00f3wnania<\/li>\n\n\n\n<li>brak niepotrzebnego sortowania<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">To nie jest \u201edrobnostka\u201d, tylko fragment logiki decyzyjnej systemu.<\/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-funkcja-maksimum-zawsze-dziala-szybciej-niz-sortowanie\">Czy funkcja maksimum zawsze dzia\u0142a szybciej ni\u017c sortowanie?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Tak, je\u015bli potrzebny jest tylko jeden najwi\u0119kszy element. Szukanie maksimum ma z\u0142o\u017cono\u015b\u0107 O(n), a sortowanie zwykle O(n log n).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"czy-mozna-znalezc-najwiekszy-element-w-generatorze\">Czy mo\u017cna znale\u017a\u0107 najwi\u0119kszy element w generatorze?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Tak. Generator jest iterowalny, wi\u0119c mo\u017cna go przekaza\u0107 do funkcji wbudowanej, ale po przej\u015bciu zostaje zu\u017cyty i nie mo\u017cna u\u017cy\u0107 go ponownie bez ponownego utworzenia.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"dlaczego-dla-napisow-wynik-bywa-zaskakujacy\">Dlaczego dla napis\u00f3w wynik bywa zaskakuj\u0105cy?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Poniewa\u017c por\u00f3wnanie odbywa si\u0119 leksykograficznie, a nie wed\u0142ug d\u0142ugo\u015bci. <code>\"zebra\"<\/code> mo\u017ce by\u0107 wi\u0119ksze od <code>\"samoch\u00f3d\"<\/code>, nawet je\u015bli jest kr\u00f3tsze.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"czy-mozna-znalezc-najwiekszy-element-wedlug-dlugosci-napisu\">Czy mo\u017cna znale\u017a\u0107 najwi\u0119kszy element wed\u0142ug d\u0142ugo\u015bci napisu?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Tak. W Pythonie u\u017cywa si\u0119 wtedy parametru <code>key<\/code>.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>J\u0119zyk<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>Python<\/td><td><code>python\\nnapisy = [\\\"kot\\\", \\\"samoch\u00f3d\\\", \\\"dom\\\"]\\nprint(max(napisy, key=len))\\n<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"co-zrobic-gdy-lista-moze-byc-pusta\">Co zrobi\u0107, gdy lista mo\u017ce by\u0107 pusta?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Najbezpieczniej sprawdzi\u0107 to przed wywo\u0142aniem albo u\u017cy\u0107 warto\u015bci domy\u015blnej, je\u015bli j\u0119zyk lub biblioteka to umo\u017cliwia.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"czy-maksimum-i-element-ostatni-po-sortowaniu-to-zawsze-to-samo\">Czy maksimum i element ostatni po sortowaniu to zawsze to samo?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Tak, ale sortowanie wykonuje znacznie wi\u0119cej pracy ni\u017c potrzeba, wi\u0119c nie jest to dobre rozwi\u0105zanie, je\u015bli potrzebny jest wy\u0142\u0105cznie jeden wynik.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ta operacja jest podstaw\u0105 wielu bardziej z\u0142o\u017conych algorytm\u00f3w. Dobrze rozumiana upraszcza p\u00f3\u017aniej prac\u0119 z selekcj\u0105 danych, rankingami i optymalizacj\u0105 kodu. W praktyce w\u0142a\u015bnie takie ma\u0142e mechanizmy najcz\u0119\u015bciej decyduj\u0105 o tym, czy program dzia\u0142a poprawnie i przewidywalnie.<\/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 iterowalnymi bardzo szybko prowadzi do potrzeby znalezienia warto\u015bci skrajnych. Czasem trzeba wskaza\u0107 najwy\u017csz\u0105 ocen\u0119 w dzienniku, czasem najwi\u0119kszy rozmiar pliku, a czasem rekord o najwy\u017cszym priorytecie w systemie kolejkowym. To pozornie prosty problem, ale spos\u00f3b jego rozwi\u0105zania ma znaczenie dla wydajno\u015bci, bezpiecze\u0144stwa programu i czytelno\u015bci kodu. W praktyce programistycznej takie operacje pojawiaj\u0105 si\u0119 niemal codziennie, szczeg\u00f3lnie podczas analizy danych, przetwarzania list oraz budowy prostych algorytm\u00f3w selekcji. Dobrym przyk\u0142adem tej operacji jest Max \u2013 zwraca najwi\u0119kszy element w iterowalnym zbiorze. Dlaczego Max \u2013 zwraca najwi\u0119kszy element w iterowalnym zbiorze jest jedn\u0105 z podstawowych operacji w pracy z danymi Iterowalny zbi\u00f3r to ka\u017cda struktura, po kt\u00f3rej mo\u017cna przechodzi\u0107 element po elemencie. W Pythonie b\u0119d\u0105 to mi\u0119dzy innymi listy, krotki, zbiory, s\u0142owniki, napisy czy generatory. W C++ podobn\u0105 rol\u0119 pe\u0142ni\u0105 kontenery STL, takie jak vector, list czy set. Sama idea jest prosta: program przegl\u0105da kolejne elementy i zapami\u0119tuje najwi\u0119kszy napotkany wynik. Po zako\u0144czeniu iteracji zwracana jest warto\u015b\u0107 ko\u0144cowa. Algorytm klasyczny wygl\u0105da tak: Z\u0142o\u017cono\u015b\u0107 czasowa wynosi tutaj: Element analizy Warto\u015b\u0107 Z\u0142o\u017cono\u015b\u0107 czasowa O(n) Z\u0142o\u017cono\u015b\u0107 pami\u0119ciowa O(1) Liczba por\u00f3wna\u0144 dla n element\u00f3w n &#8211; 1 To bardzo wa\u017cne: nie da si\u0119 znale\u017a\u0107 maksimum szybciej ni\u017c przez sprawdzenie wszystkich element\u00f3w, je\u015bli dane nie s\u0105 wcze\u015bniej uporz\u0105dkowane lub nie istniej\u0105 dodatkowe informacje o strukturze danych. Dla listy 1 000 000 liczb oznacza to 999 999 por\u00f3wna\u0144. Program wykona to szybko, ale nadal jest to operacja liniowa, wi\u0119c przy du\u017cych zbiorach ma znaczenie. Jak dzia\u0142a por\u00f3wnywanie warto\u015bci i dlaczego typ danych ma tutaj realne znaczenie Nie ka\u017cdy element mo\u017cna por\u00f3wna\u0107 w oczywisty spos\u00f3b. Liczby ca\u0142kowite s\u0105 proste, ale przy napisach, obiektach lub strukturach z\u0142o\u017conych pojawiaj\u0105 si\u0119 wa\u017cne szczeg\u00f3\u0142y. Liczby Dla liczb por\u00f3wnanie jest jednoznaczne. Dane wej\u015bciowe Wynik [3, 8, 2, 11, 5] 11 [-10, -3, -7] -3 Napisy Napisy por\u00f3wnywane s\u0105 leksykograficznie, czyli wed\u0142ug kolejno\u015bci znak\u00f3w. Dane wej\u015bciowe Wynik [&#8222;ala&#8221;, &#8222;zamek&#8221;, &#8222;kot&#8221;] &#8222;zamek&#8221; To cz\u0119sto zaskakuje pocz\u0105tkuj\u0105cych, bo najwi\u0119kszy napis nie oznacza najd\u0142u\u017cszego napisu. Obiekty Dla w\u0142asnych struktur trzeba okre\u015bli\u0107 regu\u0142\u0119 por\u00f3wnania. Na przyk\u0142ad student mo\u017ce by\u0107 por\u00f3wnywany wed\u0142ug \u015bredniej ocen, a nie wed\u0142ug nazwiska. Bez tego program mo\u017ce zg\u0142osi\u0107 b\u0142\u0105d lub zachowywa\u0107 si\u0119 nieprzewidywalnie. Max \u2013 zwraca najwi\u0119kszy element w iterowalnym zbiorze na przyk\u0142adach w Pythonie, C i C++ Python posiada wbudowan\u0105 funkcj\u0119 max(), ale dobrze rozumie\u0107 r\u00f3wnie\u017c wersj\u0119 r\u0119czn\u0105. Python \u2013 wersja wbudowana J\u0119zyk Kod Python python\\nliczby = [4, 9, 2, 15, 7]\\nwynik = max(liczby)\\nprint(wynik)\\n Wynik: Dane Rezultat [4, 9, 2, 15, 7] 15 Python \u2013 implementacja r\u0119czna J\u0119zyk Kod Python python\\nliczby = [4, 9, 2, 15, 7]\\n\\nmaksimum = liczby[0]\\n\\nfor x in liczby[1:]:\\n if x &gt; maksimum:\\n maksimum = x\\n\\nprint(maksimum)\\n Ta wersja dobrze pokazuje mechanik\u0119 dzia\u0142ania. C \u2013 podej\u015bcie proceduralne J\u0119zyk Kod C c\\n#include &lt;stdio.h&gt;\\n\\nint main() {\\n int tablica[] = {4, 9, 2, 15, 7};\\n int n = 5;\\n int maksimum = tablica[0];\\n\\n for (int i = 1; i &lt; n; i++) {\\n if (tablica[i] &gt; maksimum) {\\n maksimum = tablica[i];\\n }\\n }\\n\\n printf(\\&#8221;%d\\\\n\\&#8221;, maksimum);\\n return 0;\\n}\\n W C trzeba samodzielnie pilnowa\u0107 rozmiaru tablicy i inicjalizacji pierwszego elementu. C++ \u2013 STL J\u0119zyk Kod C++ cpp\\n#include &lt;iostream&gt;\\n#include &lt;vector&gt;\\n#include &lt;algorithm&gt;\\n\\nint main() {\\n std::vector&lt;int&gt; liczby = {4, 9, 2, 15, 7};\\n\\n int wynik = *std::max_element(liczby.begin(), liczby.end());\\n\\n std::cout &lt;&lt; wynik &lt;&lt; std::endl;\\n return 0;\\n}\\n Tutaj u\u017cywane jest std::max_element, kt\u00f3re zwraca iterator, dlatego potrzebne jest *. Problem pustych kolekcji i dlaczego ten b\u0142\u0105d pojawia si\u0119 cz\u0119\u015bciej ni\u017c si\u0119 wydaje Najcz\u0119stszy problem praktyczny to pusta lista. Dla pustego zbioru nie istnieje najwi\u0119kszy element. Matematycznie nie ma czego por\u00f3wnywa\u0107, a programistycznie ko\u0144czy si\u0119 to wyj\u0105tkiem lub b\u0142\u0119dem wykonania. Python Sytuacja Efekt max([]) ValueError Bezpieczniejsze podej\u015bcie: J\u0119zyk Kod Python python\\nliczby = []\\n\\nif liczby:\\n print(max(liczby))\\nelse:\\n print(\\&#8221;Brak danych\\&#8221;)\\n Od nowszych wersji Pythona mo\u017cna te\u017c u\u017cy\u0107 parametru default. J\u0119zyk Kod Python python\\nliczby = []\\nprint(max(liczby, default=0))\\n To szczeg\u00f3lnie przydatne w raportach, parserach plik\u00f3w i systemach importu danych, gdzie puste kolekcje s\u0105 normalnym przypadkiem. Max \u2013 zwraca najwi\u0119kszy element w iterowalnym zbiorze z w\u0142asnym kryterium por\u00f3wnania Cz\u0119sto nie szukamy najwi\u0119kszej warto\u015bci samej w sobie, ale elementu \u201enajlepszego\u201d wed\u0142ug okre\u015blonej cechy. Przyk\u0142ad: lista student\u00f3w. Dane Cel Imi\u0119 + \u015brednia znale\u017a\u0107 najwy\u017csz\u0105 \u015bredni\u0105 Python z parametrem key J\u0119zyk Kod Python python\\nstudenci = [\\n (\\&#8221;Anna\\&#8221;, 4.2),\\n (\\&#8221;Marek\\&#8221;, 4.8),\\n (\\&#8221;Julia\\&#8221;, 4.5)\\n]\\n\\nnajlepszy = max(studenci, key=lambda x: x[1])\\nprint(najlepszy)\\n Wynik: Rezultat (&#8217;Marek&#8217;, 4.8) Tutaj por\u00f3wnywany jest drugi element krotki. To bardzo wa\u017cny mechanizm, bo dzi\u0119ki niemu mo\u017cna wybiera\u0107: Bez potrzeby r\u0119cznego sortowania ca\u0142ej kolekcji. R\u00f3\u017cnica mi\u0119dzy szukaniem maksimum a sortowaniem ca\u0142ego zbioru B\u0142\u0105d pocz\u0105tkuj\u0105cych wygl\u0105da tak: Technicznie dzia\u0142a, ale jest mniej wydajne. Por\u00f3wnanie: Operacja Z\u0142o\u017cono\u015b\u0107 znalezienie maksimum O(n) pe\u0142ne sortowanie O(n log n) Dla ma\u0142ej listy r\u00f3\u017cnica mo\u017ce by\u0107 niewidoczna, ale dla milion\u00f3w rekord\u00f3w koszt staje si\u0119 realny. Je\u015bli potrzebny jest tylko najwi\u0119kszy element, sortowanie ca\u0142ej struktury jest strat\u0105 czasu i zasob\u00f3w. To cz\u0119sty problem w zadaniach rekrutacyjnych i kodzie produkcyjnym pisanym w po\u015bpiechu. Typowe pu\u0142apki i b\u0142\u0119dy, kt\u00f3re psuj\u0105 wynik mimo pozornie prostego kodu Z\u0142a inicjalizacja maksimum B\u0142\u0105d: J\u0119zyk Kod Python python\\nmaksimum = 0\\n Je\u015bli lista zawiera tylko liczby ujemne, wynik b\u0119dzie b\u0142\u0119dny. Przyk\u0142ad: Dane B\u0142\u0119dny wynik [-8, -3, -10] 0 Poprawnie nale\u017cy u\u017cy\u0107 pierwszego elementu kolekcji. Por\u00f3wnywanie niepor\u00f3wnywalnych typ\u00f3w Przyk\u0142ad: J\u0119zyk Kod Python python\\nmax([3, \\&#8221;tekst\\&#8221;, 7])\\n Mo\u017ce zako\u0144czy\u0107 si\u0119 wyj\u0105tkiem, poniewa\u017c typy nie maj\u0105 wsp\u00f3lnej regu\u0142y por\u00f3wnania. Nie\u015bwiadome por\u00f3wnywanie napis\u00f3w zamiast liczb Przyk\u0142ad: Dane wej\u015bciowe Wynik [&#8222;100&#8221;, &#8222;20&#8221;, &#8222;3&#8221;] &#8222;3&#8221; To poprawne leksykograficznie, ale b\u0142\u0119dne biznesowo. Najpierw trzeba wykona\u0107 konwersj\u0119: J\u0119zyk Kod Python python\\nliczby = list(map(int, [\\&#8221;100\\&#8221;, \\&#8221;20\\&#8221;, \\&#8221;3\\&#8221;]))\\nprint(max(liczby))\\n Uwagi praktyczne z codziennej pracy programisty W systemach rzeczywistych problem maksimum rzadko wyst\u0119puje jako osobne zadanie. Zwykle jest cz\u0119\u015bci\u0105 wi\u0119kszego procesu: Na przyk\u0142ad serwer mo\u017ce wybiera\u0107 najwi\u0119ksze u\u017cycie pami\u0119ci z ostatnich 24 godzin. B\u0142\u0105d w tej logice mo\u017ce oznacza\u0107 brak alertu i realne straty operacyjne. Dlatego nawet tak prosta operacja powinna by\u0107 traktowana powa\u017cnie: To nie jest \u201edrobnostka\u201d, tylko fragment logiki decyzyjnej systemu. FAQ Czy funkcja maksimum zawsze dzia\u0142a szybciej ni\u017c sortowanie? Tak, je\u015bli potrzebny jest tylko jeden najwi\u0119kszy element. Szukanie maksimum ma z\u0142o\u017cono\u015b\u0107 O(n), a sortowanie zwykle O(n log n). Czy mo\u017cna znale\u017a\u0107 najwi\u0119kszy element w generatorze? Tak. Generator jest iterowalny, wi\u0119c mo\u017cna go przekaza\u0107 do funkcji wbudowanej, ale po przej\u015bciu zostaje zu\u017cyty i nie mo\u017cna u\u017cy\u0107 go ponownie bez ponownego utworzenia. Dlaczego dla napis\u00f3w wynik bywa zaskakuj\u0105cy? Poniewa\u017c por\u00f3wnanie odbywa si\u0119 leksykograficznie, a nie wed\u0142ug d\u0142ugo\u015bci. &#8222;zebra&#8221; mo\u017ce by\u0107 wi\u0119ksze od &#8222;samoch\u00f3d&#8221;, nawet je\u015bli jest kr\u00f3tsze. Czy mo\u017cna znale\u017a\u0107 najwi\u0119kszy element wed\u0142ug d\u0142ugo\u015bci napisu? Tak. W Pythonie u\u017cywa si\u0119 wtedy parametru key. J\u0119zyk Kod Python python\\nnapisy = [\\&#8221;kot\\&#8221;, \\&#8221;samoch\u00f3d\\&#8221;, \\&#8221;dom\\&#8221;]\\nprint(max(napisy, key=len))\\n Co zrobi\u0107, gdy lista mo\u017ce by\u0107 pusta? Najbezpieczniej sprawdzi\u0107 to przed wywo\u0142aniem albo u\u017cy\u0107 warto\u015bci domy\u015blnej, je\u015bli j\u0119zyk lub biblioteka to umo\u017cliwia. Czy maksimum i element ostatni po sortowaniu to zawsze to samo? Tak, ale sortowanie wykonuje znacznie wi\u0119cej pracy ni\u017c potrzeba, wi\u0119c nie jest to dobre rozwi\u0105zanie, je\u015bli potrzebny jest wy\u0142\u0105cznie jeden wynik. Ta operacja jest podstaw\u0105 wielu bardziej z\u0142o\u017conych algorytm\u00f3w. Dobrze rozumiana upraszcza p\u00f3\u017aniej prac\u0119 z selekcj\u0105 danych, rankingami i optymalizacj\u0105 kodu. W praktyce w\u0142a\u015bnie takie ma\u0142e mechanizmy najcz\u0119\u015bciej decyduj\u0105 o tym, czy program dzia\u0142a poprawnie i przewidywalnie. \u0179r\u00f3d\u0142o Foto: Freepik<\/p>\n","protected":false},"author":1,"featured_media":1503,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[27],"tags":[],"class_list":["post-1502","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\/1502","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=1502"}],"version-history":[{"count":1,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/posts\/1502\/revisions"}],"predecessor-version":[{"id":1504,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/posts\/1502\/revisions\/1504"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/media\/1503"}],"wp:attachment":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/media?parent=1502"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/categories?post=1502"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/tags?post=1502"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}