{"id":1444,"date":"2026-04-21T20:14:56","date_gmt":"2026-04-21T18:14:56","guid":{"rendered":"https:\/\/trzykody.pl\/?p=1444"},"modified":"2026-04-21T20:14:58","modified_gmt":"2026-04-21T18:14:58","slug":"python-tablice-w-praktyce-programisty-indeksowanie-operacje-na-danych-i-wydajne-przetwarzanie-list","status":"publish","type":"post","link":"https:\/\/trzykody.pl\/index.php\/2026\/04\/21\/python-tablice-w-praktyce-programisty-indeksowanie-operacje-na-danych-i-wydajne-przetwarzanie-list\/","title":{"rendered":"Python tablice w praktyce programisty \u2013 indeksowanie, operacje na danych i wydajne przetwarzanie list"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Praca z danymi rzadko ko\u0144czy si\u0119 na pojedynczej zmiennej. W praktyce prawie zawsze pojawia si\u0119 potrzeba przechowywania wielu warto\u015bci tego samego typu: list liczb, wynik\u00f3w pomiar\u00f3w, nazw u\u017cytkownik\u00f3w, wsp\u00f3\u0142rz\u0119dnych punkt\u00f3w albo danych odczytywanych z pliku. Programista musi wtedy wybra\u0107 struktur\u0119, kt\u00f3ra pozwala wygodnie te dane zapisa\u0107, odczyta\u0107 i przetwarza\u0107 bez chaosu oraz bez niepotrzebnego spowalniania programu. W j\u0119zyku Python najcz\u0119\u015bciej wykorzystuje si\u0119 do tego listy, krotki oraz tablice numeryczne z bibliotek dodatkowych, dlatego zrozumienie zagadnienia <strong>Python tablice<\/strong> ma bardzo praktyczne znaczenie ju\u017c na pocz\u0105tku nauki.<\/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=\"#python-tablice-w-praktyce-pracy-z-danymi-sekwencyjnymi-i-indeksowaniem\">Python tablice w praktyce pracy z danymi sekwencyjnymi i indeksowaniem<\/a><\/li><li><a href=\"#roznica-miedzy-lista-krotka-i-klasyczna-tablica-oraz-wplyw-na-wydajnosc-programu\">R\u00f3\u017cnica mi\u0119dzy list\u0105, krotk\u0105 i klasyczn\u0105 tablic\u0105 oraz wp\u0142yw na wydajno\u015b\u0107 programu<\/a><\/li><li><a href=\"#python-tablice-oraz-operacje-dodawania-usuwania-i-modyfikacji-elementow\">Python tablice oraz operacje dodawania usuwania i modyfikacji element\u00f3w<\/a><\/li><li><a href=\"#iteracja-po-elementach-oraz-wyszukiwanie-wartosci-bez-zbednych-bledow-logicznych\">Iteracja po elementach oraz wyszukiwanie warto\u015bci bez zb\u0119dnych b\u0142\u0119d\u00f3w logicznych<\/a><\/li><li><a href=\"#python-tablice-przy-obliczeniach-numerycznych-i-wspolpracy-z-biblioteka-num-py\">Python tablice przy obliczeniach numerycznych i wsp\u00f3\u0142pracy z bibliotek\u0105 NumPy<\/a><\/li><li><a href=\"#najczestsze-pulapki-praktyczne-i-bledy-ktore-kosztuja-najwiecej-czasu\">Najcz\u0119stsze pu\u0142apki praktyczne i b\u0142\u0119dy, kt\u00f3re kosztuj\u0105 najwi\u0119cej czasu<\/a><\/li><li><a href=\"#faq\">FAQ<\/a><ol><li><a href=\"#czy-lista-i-tablica-to-dokladnie-to-samo\">Czy lista i tablica to dok\u0142adnie to samo?<\/a><\/li><li><a href=\"#kiedy-lepiej-uzyc-krotki-zamiast-listy\">Kiedy lepiej u\u017cy\u0107 krotki zamiast listy?<\/a><\/li><li><a href=\"#czy-num-py-zawsze-jest-lepsze-od-list\">Czy NumPy zawsze jest lepsze od list?<\/a><\/li><li><a href=\"#dlaczego-indeksowanie-zaczyna-sie-od-zera\">Dlaczego indeksowanie zaczyna si\u0119 od zera?<\/a><\/li><li><a href=\"#czy-mozna-przechowywac-rozne-typy-danych-w-jednej-liscie\">Czy mo\u017cna przechowywa\u0107 r\u00f3\u017cne typy danych w jednej li\u015bcie?<\/a><\/li><li><a href=\"#co-jest-szybsze-lista-czy-set-przy-wyszukiwaniu\">Co jest szybsze: lista czy set przy wyszukiwaniu?<\/a><\/li><\/ol><\/li><\/ol><\/nav><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"python-tablice-w-praktyce-pracy-z-danymi-sekwencyjnymi-i-indeksowaniem\">Python tablice w praktyce pracy z danymi sekwencyjnymi i indeksowaniem<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">W samym Pythonie nie istnieje \u201etablica\u201d w dok\u0142adnie takim znaczeniu jak w j\u0119zyku C, gdzie mamy ci\u0105g\u0142y blok pami\u0119ci o sta\u0142ym typie element\u00f3w. Najcz\u0119\u015bciej rol\u0119 tablicy pe\u0142ni lista (<code>list<\/code>), czyli dynamiczna struktura sekwencyjna.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Lista mo\u017ce przechowywa\u0107 wiele element\u00f3w i pozwala na ich zmian\u0119 w trakcie dzia\u0142ania programu. Mo\u017cna dodawa\u0107 nowe warto\u015bci, usuwa\u0107 stare, zmienia\u0107 kolejno\u015b\u0107 oraz odwo\u0142ywa\u0107 si\u0119 do konkretnego elementu przez indeks.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Indeksowanie zaczyna si\u0119 od zera. To jeden z najcz\u0119stszych b\u0142\u0119d\u00f3w pocz\u0105tkuj\u0105cych. Je\u015bli lista ma pi\u0119\u0107 element\u00f3w, ich indeksy to: <code>0, 1, 2, 3, 4<\/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>Operacja<\/th><th>Kod<\/th><th>Wynik<\/th><\/tr><\/thead><tbody><tr><td>Utworzenie listy<\/td><td><code>liczby = [10, 20, 30, 40]<\/code><\/td><td>lista czterech element\u00f3w<\/td><\/tr><tr><td>Odczyt pierwszego elementu<\/td><td><code>print(liczby[0])<\/code><\/td><td><code>10<\/code><\/td><\/tr><tr><td>Odczyt ostatniego elementu<\/td><td><code>print(liczby[-1])<\/code><\/td><td><code>40<\/code><\/td><\/tr><tr><td>D\u0142ugo\u015b\u0107 listy<\/td><td><code>print(len(liczby))<\/code><\/td><td><code>4<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Indeks ujemny oznacza liczenie od ko\u0144ca. <code>-1<\/code> to ostatni element, <code>-2<\/code> przedostatni itd. W praktyce bardzo wygodne przy analizie log\u00f3w, danych pomiarowych albo ostatnich rekord\u00f3w.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">W C sytuacja wygl\u0105da inaczej. Tablica ma zwykle sta\u0142y rozmiar i konkretny typ danych.<\/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>C<\/td><td><code>int liczby[4] = {10, 20, 30, 40};<\/code><\/td><\/tr><tr><td>C++<\/td><td><code>int liczby[4] = {10, 20, 30, 40};<\/code><\/td><\/tr><tr><td>Python<\/td><td><code>liczby = [10, 20, 30, 40]<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">W Pythonie lista jest wygodniejsza, ale ma wi\u0119kszy koszt pami\u0119ciowy. Przy bardzo du\u017cych zbiorach danych to zaczyna mie\u0107 znaczenie.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Istnieje te\u017c wycinanie fragment\u00f3w listy, czyli slicing. To mechanizm bardzo cz\u0119sto u\u017cywany przy analizie danych.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Operacja<\/th><th>Kod<\/th><th>Wynik<\/th><\/tr><\/thead><tbody><tr><td>Pierwsze trzy elementy<\/td><td><code>print(liczby[:3])<\/code><\/td><td><code>[10, 20, 30]<\/code><\/td><\/tr><tr><td>Od drugiego do ko\u0144ca<\/td><td><code>print(liczby[1:])<\/code><\/td><td><code>[20, 30, 40]<\/code><\/td><\/tr><tr><td>Co drugi element<\/td><td><code>print(liczby[::2])<\/code><\/td><td><code>[10, 30]<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Schemat dzia\u0142ania mo\u017cna zapisa\u0107 jako:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Wz\u00f3r<\/th><th>Znaczenie<\/th><\/tr><\/thead><tbody><tr><td><code>lista[start:stop:krok]<\/code><\/td><td>fragment od <code>start<\/code> do <code>stop - 1<\/code> co <code>krok<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Brak zrozumienia tego zapisu cz\u0119sto prowadzi do b\u0142\u0119d\u00f3w logicznych, szczeg\u00f3lnie przy sortowaniu i przetwarzaniu fragment\u00f3w danych.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"roznica-miedzy-lista-krotka-i-klasyczna-tablica-oraz-wplyw-na-wydajnosc-programu\">R\u00f3\u017cnica mi\u0119dzy list\u0105, krotk\u0105 i klasyczn\u0105 tablic\u0105 oraz wp\u0142yw na wydajno\u015b\u0107 programu<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Nie ka\u017cda sekwencja danych powinna by\u0107 list\u0105. Python udost\u0119pnia tak\u017ce krotki (<code>tuple<\/code>) oraz modu\u0142 <code>array<\/code>, a w obliczeniach numerycznych zwykle u\u017cywa si\u0119 <code>NumPy<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Krotka jest niemodyfikowalna. Po utworzeniu nie mo\u017cna zmieni\u0107 jej zawarto\u015bci. To zaleta, gdy dane maj\u0105 pozosta\u0107 sta\u0142e.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Struktura<\/th><th>Cechy<\/th><\/tr><\/thead><tbody><tr><td>Lista (<code>list<\/code>)<\/td><td>dynamiczna, modyfikowalna<\/td><\/tr><tr><td>Krotka (<code>tuple<\/code>)<\/td><td>niemodyfikowalna, szybsza przy odczycie<\/td><\/tr><tr><td><code>array<\/code><\/td><td>jednolity typ danych<\/td><\/tr><tr><td><code>NumPy array<\/code><\/td><td>szybkie obliczenia numeryczne<\/td><\/tr><\/tbody><\/table><\/figure>\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>Typ<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>Lista<\/td><td><code>punkty = [3, 7, 9]<\/code><\/td><\/tr><tr><td>Krotka<\/td><td><code>punkty = (3, 7, 9)<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Je\u015bli program przechowuje miliony warto\u015bci liczbowych, lista mo\u017ce by\u0107 nieefektywna. Ka\u017cdy element listy jest obiektem Pythona, co zwi\u0119ksza zu\u017cycie pami\u0119ci.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dla przyk\u0142adu:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>lista 1 000 000 liczb ca\u0142kowitych mo\u017ce zajmowa\u0107 dziesi\u0105tki megabajt\u00f3w wi\u0119cej ni\u017c struktura numeryczna,<\/li>\n\n\n\n<li>operacje matematyczne wykonywane element po elemencie s\u0105 znacznie wolniejsze ni\u017c obliczenia wektorowe.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Dlatego w analizie danych, uczeniu maszynowym i symulacjach praktycznie standardem jest NumPy.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Warto te\u017c pami\u0119ta\u0107 o module <code>array<\/code>, kt\u00f3ry jest mniej popularny, ale bywa przydatny.<\/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><code>from array import array<\/code><\/td><td>import modu\u0142u<\/td><\/tr><tr><td><code>a = array('i', [1, 2, 3, 4])<\/code><\/td><td>tablica liczb ca\u0142kowitych<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Litera <code>'i'<\/code> oznacza typ integer. Dzi\u0119ki temu dane s\u0105 przechowywane oszcz\u0119dniej ni\u017c w zwyk\u0142ej li\u015bcie.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"python-tablice-oraz-operacje-dodawania-usuwania-i-modyfikacji-elementow\">Python tablice oraz operacje dodawania usuwania i modyfikacji element\u00f3w<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Najwi\u0119cej b\u0142\u0119d\u00f3w praktycznych pojawia si\u0119 w\u0142a\u015bnie tutaj: program dzia\u0142a, ale wynik jest z\u0142y, bo element zosta\u0142 dodany nie tam, gdzie trzeba, albo usuni\u0119to niew\u0142a\u015bciwy indeks.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Podstawowe operacje trzeba zna\u0107 bez zastanawiania si\u0119.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Operacja<\/th><th>Kod<\/th><th>Efekt<\/th><\/tr><\/thead><tbody><tr><td>Dodanie na ko\u0144cu<\/td><td><code>lista.append(50)<\/code><\/td><td>dopisanie jednego elementu<\/td><\/tr><tr><td>Dodanie wielu element\u00f3w<\/td><td><code>lista.extend([60, 70])<\/code><\/td><td>rozszerzenie listy<\/td><\/tr><tr><td>Wstawienie w \u015brodek<\/td><td><code>lista.insert(1, 15)<\/code><\/td><td>wstawienie na indeks 1<\/td><\/tr><tr><td>Usuni\u0119cie po warto\u015bci<\/td><td><code>lista.remove(20)<\/code><\/td><td>usuwa pierwsze wyst\u0105pienie<\/td><\/tr><tr><td>Usuni\u0119cie po indeksie<\/td><td><code>lista.pop(2)<\/code><\/td><td>usuwa element o indeksie 2<\/td><\/tr><tr><td>Czyszczenie<\/td><td><code>lista.clear()<\/code><\/td><td>usuwa wszystko<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad w Pythonie:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Kod<\/th><\/tr><\/thead><tbody><tr><td><code>oceny = [3, 4, 5]<\/code><\/td><\/tr><tr><td><code>oceny.append(6)<\/code><\/td><\/tr><tr><td><code>oceny[1] = 5<\/code><\/td><\/tr><tr><td><code>print(oceny)<\/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>Wynik<\/th><\/tr><\/thead><tbody><tr><td><code>[3, 5, 5, 6]<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">W C lub C++ takie operacje s\u0105 bardziej r\u0119czne. Trzeba kontrolowa\u0107 rozmiar tablicy i cz\u0119sto kopiowa\u0107 dane.<\/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>C++<\/td><td><code>vector&lt;int&gt; oceny = {3,4,5};<\/code><\/td><\/tr><tr><td>C++<\/td><td><code>oceny.push_back(6);<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">W praktyce pocz\u0105tkuj\u0105cy cz\u0119sto u\u017cywaj\u0105 <code>remove()<\/code> i zak\u0142adaj\u0105, \u017ce usuwa element po indeksie. To b\u0142\u0105d. <code>remove()<\/code> usuwa po warto\u015bci, a <code>pop()<\/code> po pozycji.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Kolejna pu\u0142apka to modyfikacja listy podczas iteracji:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>B\u0142\u0119dny kod<\/th><\/tr><\/thead><tbody><tr><td><code>for x in lista:<\/code><\/td><\/tr><tr><td><code>if x &lt; 0:<\/code><\/td><\/tr><tr><td><code>lista.remove(x)<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">To mo\u017ce pomin\u0105\u0107 cz\u0119\u015b\u0107 element\u00f3w. Bezpieczniej u\u017cywa\u0107 nowej listy:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Poprawny kod<\/th><\/tr><\/thead><tbody><tr><td><code>lista = [x for x in lista if x &gt;= 0]<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">To rozwi\u0105zanie jest prostsze i zwykle bardziej przewidywalne.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"iteracja-po-elementach-oraz-wyszukiwanie-wartosci-bez-zbednych-bledow-logicznych\">Iteracja po elementach oraz wyszukiwanie warto\u015bci bez zb\u0119dnych b\u0142\u0119d\u00f3w logicznych<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Sama obecno\u015b\u0107 danych nie wystarcza. Najcz\u0119\u015bciej trzeba je przeliczy\u0107, sprawdzi\u0107 lub przefiltrowa\u0107.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Podstawowa iteracja:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Kod<\/th><\/tr><\/thead><tbody><tr><td><code>for x in liczby:<\/code><\/td><\/tr><tr><td><code>print(x)<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Gdy potrzebny jest indeks:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Kod<\/th><\/tr><\/thead><tbody><tr><td><code>for i, x in enumerate(liczby):<\/code><\/td><\/tr><tr><td><code>print(i, x)<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">To lepsze ni\u017c r\u0119czne zwi\u0119kszanie licznika.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Suma element\u00f3w:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Kod<\/th><\/tr><\/thead><tbody><tr><td><code>suma = sum(liczby)<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Maksimum i minimum:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Kod<\/th><\/tr><\/thead><tbody><tr><td><code>maks = max(liczby)<\/code><\/td><\/tr><tr><td><code>mini = min(liczby)<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Sprawdzenie obecno\u015bci:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Kod<\/th><\/tr><\/thead><tbody><tr><td><code>if 20 in liczby:<\/code><\/td><\/tr><tr><td><code>print(\"znaleziono\")<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Z\u0142o\u017cono\u015b\u0107 wyszukiwania w li\u015bcie jest liniowa:<\/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>odczyt po indeksie<\/td><td><code>O(1)<\/code><\/td><\/tr><tr><td>wyszukiwanie warto\u015bci<\/td><td><code>O(n)<\/code><\/td><\/tr><tr><td>dodanie na ko\u0144cu<\/td><td>\u015brednio <code>O(1)<\/code><\/td><\/tr><tr><td>wstawienie na pocz\u0105tek<\/td><td><code>O(n)<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Przy bardzo du\u017cych danych to ma znaczenie. Je\u015bli stale sprawdzamy obecno\u015b\u0107 elementu, czasem lepszy b\u0119dzie zbi\u00f3r (<code>set<\/code>) ni\u017c lista.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"python-tablice-przy-obliczeniach-numerycznych-i-wspolpracy-z-biblioteka-num-py\">Python tablice przy obliczeniach numerycznych i wsp\u00f3\u0142pracy z bibliotek\u0105 NumPy<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Przy obliczeniach matematycznych zwyk\u0142a lista szybko staje si\u0119 niewygodna. Dodawanie dw\u00f3ch list nie oznacza dodawania element\u00f3w, tylko ich \u0142\u0105czenie.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Kod<\/th><th>Wynik<\/th><\/tr><\/thead><tbody><tr><td><code>[1,2] + [3,4]<\/code><\/td><td><code>[1,2,3,4]<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Dla matematyki to zwykle nie to, czego oczekujemy.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dlatego u\u017cywa si\u0119 NumPy.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Kod<\/th><\/tr><\/thead><tbody><tr><td><code>import numpy as np<\/code><\/td><\/tr><tr><td><code>a = np.array([1, 2, 3])<\/code><\/td><\/tr><tr><td><code>b = np.array([4, 5, 6])<\/code><\/td><\/tr><tr><td><code>print(a + b)<\/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>Wynik<\/th><\/tr><\/thead><tbody><tr><td><code>[5 7 9]<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">To ju\u017c dzia\u0142anie wektorowe.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u015arednia:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Kod<\/th><\/tr><\/thead><tbody><tr><td><code>print(np.mean(a))<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Odchylenie standardowe:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Kod<\/th><\/tr><\/thead><tbody><tr><td><code>print(np.std(a))<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Wzory wykorzystywane najcz\u0119\u015bciej:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Wz\u00f3r<\/th><th>Znaczenie<\/th><\/tr><\/thead><tbody><tr><td><code>\\bar{x} = \\frac{1}{n}\\sum_{i=1}^{n}x_i<\/code><\/td><td>\u015brednia arytmetyczna<\/td><\/tr><tr><td><code>s = \\sqrt{\\frac{1}{n}\\sum_{i=1}^{n}(x_i-\\bar{x})^2}<\/code><\/td><td>odchylenie standardowe<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><math xmlns=\"http:\/\/www.w3.org\/1998\/Math\/MathML\"><semantics><mrow><mover accent=\"true\"><mi>x<\/mi><mo>\u02c9<\/mo><\/mover><mo>=<\/mo><mfrac><mn>1<\/mn><mi>n<\/mi><\/mfrac><msubsup><mo>\u2211<\/mo><mrow><mi>i<\/mi><mo>=<\/mo><mn>1<\/mn><\/mrow><mi>n<\/mi><\/msubsup><msub><mi>x<\/mi><mi>i<\/mi><\/msub><\/mrow><annotation encoding=\"application\/x-tex\">\\bar{x} = \\frac{1}{n}\\sum_{i=1}^{n}x_i<\/annotation><\/semantics><\/math>x\u02c9=n1\u200b\u2211i=1n\u200bxi\u200b<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">NumPy jest standardem w:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>analizie danych,<\/li>\n\n\n\n<li>przetwarzaniu sygna\u0142\u00f3w,<\/li>\n\n\n\n<li>statystyce,<\/li>\n\n\n\n<li>modelach predykcyjnych,<\/li>\n\n\n\n<li>grafice naukowej,<\/li>\n\n\n\n<li>systemach uczenia maszynowego.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Bez tej biblioteki wi\u0119ksze obliczenia szybko staj\u0105 si\u0119 wolne i trudne do utrzymania.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"najczestsze-pulapki-praktyczne-i-bledy-ktore-kosztuja-najwiecej-czasu\">Najcz\u0119stsze pu\u0142apki praktyczne i b\u0142\u0119dy, kt\u00f3re kosztuj\u0105 najwi\u0119cej czasu<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Pierwszy problem to kopiowanie list.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Kod<\/th><th>Efekt<\/th><\/tr><\/thead><tbody><tr><td><code>a = [1,2,3]<\/code><\/td><td>lista \u017ar\u00f3d\u0142owa<\/td><\/tr><tr><td><code>b = a<\/code><\/td><td>nie kopia, tylko drugi odno\u015bnik<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Zmiana <code>b<\/code> zmienia te\u017c <code>a<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Poprawnie:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Kod<\/th><\/tr><\/thead><tbody><tr><td><code>b = a.copy()<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Drugi problem to domy\u015blne argumenty funkcji.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>B\u0142\u0119dny kod<\/th><\/tr><\/thead><tbody><tr><td><code>def dodaj(x, lista=[]):<\/code><\/td><\/tr><tr><td><code>lista.append(x)<\/code><\/td><\/tr><tr><td><code>return lista<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Lista zostaje zapami\u0119tana mi\u0119dzy wywo\u0142aniami funkcji.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bezpieczniej:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Poprawny kod<\/th><\/tr><\/thead><tbody><tr><td><code>def dodaj(x, lista=None):<\/code><\/td><\/tr><tr><td><code>if lista is None:<\/code><\/td><\/tr><tr><td><code>lista = []<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Trzeci problem to przekonanie, \u017ce szybciej znaczy lepiej. Czasem prosty <code>for<\/code> jest czytelniejszy ni\u017c skomplikowane jednolinijkowe konstrukcje.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Kod ma by\u0107 przede wszystkim zrozumia\u0142y za p\u00f3\u0142 roku, nie tylko kr\u00f3tki dzi\u015b.<\/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-lista-i-tablica-to-dokladnie-to-samo\">Czy lista i tablica to dok\u0142adnie to samo?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Nie. W codziennej rozmowie cz\u0119sto u\u017cywa si\u0119 tych s\u0142\u00f3w zamiennie, ale technicznie lista w Pythonie jest dynamiczn\u0105 struktur\u0105 obiektow\u0105, a klasyczna tablica z C to zwykle ci\u0105g\u0142y blok pami\u0119ci o sta\u0142ym typie i rozmiarze.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"kiedy-lepiej-uzyc-krotki-zamiast-listy\">Kiedy lepiej u\u017cy\u0107 krotki zamiast listy?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Gdy dane nie powinny si\u0119 zmienia\u0107, na przyk\u0142ad wsp\u00f3\u0142rz\u0119dne punktu, sta\u0142e konfiguracje albo warto\u015bci zwracane przez funkcj\u0119. Krotka jest bezpieczniejsza logicznie i zwykle troch\u0119 l\u017cejsza.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"czy-num-py-zawsze-jest-lepsze-od-list\">Czy NumPy zawsze jest lepsze od list?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Nie. Dla kilku element\u00f3w zwyk\u0142a lista jest prostsza. NumPy daje du\u017c\u0105 przewag\u0119 przy wi\u0119kszych zbiorach danych i obliczeniach numerycznych wykonywanych masowo.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"dlaczego-indeksowanie-zaczyna-sie-od-zera\">Dlaczego indeksowanie zaczyna si\u0119 od zera?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">To wynika z historycznej konstrukcji j\u0119zyk\u00f3w programowania i sposobu adresowania pami\u0119ci. Indeks oznacza przesuni\u0119cie od pocz\u0105tku struktury, wi\u0119c pierwszy element ma przesuni\u0119cie r\u00f3wne zero.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"czy-mozna-przechowywac-rozne-typy-danych-w-jednej-liscie\">Czy mo\u017cna przechowywa\u0107 r\u00f3\u017cne typy danych w jednej li\u015bcie?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Tak. Python na to pozwala, ale w praktyce cz\u0119sto pogarsza to czytelno\u015b\u0107 kodu i utrudnia przetwarzanie danych. W wi\u0119kszo\u015bci zastosowa\u0144 lepiej zachowa\u0107 sp\u00f3jno\u015b\u0107 typ\u00f3w.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"co-jest-szybsze-lista-czy-set-przy-wyszukiwaniu\">Co jest szybsze: lista czy set przy wyszukiwaniu?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Dla sprawdzania obecno\u015bci elementu zwykle szybszy jest <code>set<\/code>, poniewa\u017c operacja ma \u015brednio z\u0142o\u017cono\u015b\u0107 blisk\u0105 <code>O(1)<\/code>, podczas gdy lista wymaga najcz\u0119\u015bciej <code>O(n)<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dobra praca z sekwencjami danych nie polega na pami\u0119taniu nazw metod, tylko na rozumieniu kosztu operacji i skutk\u00f3w wyboru struktury. To w\u0142a\u015bnie decyduje, czy program pozostanie prosty i przewidywalny, czy po kilku tygodniach zacznie generowa\u0107 trudne do znalezienia b\u0142\u0119dy.<\/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 rzadko ko\u0144czy si\u0119 na pojedynczej zmiennej. W praktyce prawie zawsze pojawia si\u0119 potrzeba przechowywania wielu warto\u015bci tego samego typu: list liczb, wynik\u00f3w pomiar\u00f3w, nazw u\u017cytkownik\u00f3w, wsp\u00f3\u0142rz\u0119dnych punkt\u00f3w albo danych odczytywanych z pliku. Programista musi wtedy wybra\u0107 struktur\u0119, kt\u00f3ra pozwala wygodnie te dane zapisa\u0107, odczyta\u0107 i przetwarza\u0107 bez chaosu oraz bez niepotrzebnego spowalniania programu. W j\u0119zyku Python najcz\u0119\u015bciej wykorzystuje si\u0119 do tego listy, krotki oraz tablice numeryczne z bibliotek dodatkowych, dlatego zrozumienie zagadnienia Python tablice ma bardzo praktyczne znaczenie ju\u017c na pocz\u0105tku nauki. Python tablice w praktyce pracy z danymi sekwencyjnymi i indeksowaniem W samym Pythonie nie istnieje \u201etablica\u201d w dok\u0142adnie takim znaczeniu jak w j\u0119zyku C, gdzie mamy ci\u0105g\u0142y blok pami\u0119ci o sta\u0142ym typie element\u00f3w. Najcz\u0119\u015bciej rol\u0119 tablicy pe\u0142ni lista (list), czyli dynamiczna struktura sekwencyjna. Lista mo\u017ce przechowywa\u0107 wiele element\u00f3w i pozwala na ich zmian\u0119 w trakcie dzia\u0142ania programu. Mo\u017cna dodawa\u0107 nowe warto\u015bci, usuwa\u0107 stare, zmienia\u0107 kolejno\u015b\u0107 oraz odwo\u0142ywa\u0107 si\u0119 do konkretnego elementu przez indeks. Indeksowanie zaczyna si\u0119 od zera. To jeden z najcz\u0119stszych b\u0142\u0119d\u00f3w pocz\u0105tkuj\u0105cych. Je\u015bli lista ma pi\u0119\u0107 element\u00f3w, ich indeksy to: 0, 1, 2, 3, 4. Przyk\u0142ad: Operacja Kod Wynik Utworzenie listy liczby = [10, 20, 30, 40] lista czterech element\u00f3w Odczyt pierwszego elementu print(liczby[0]) 10 Odczyt ostatniego elementu print(liczby[-1]) 40 D\u0142ugo\u015b\u0107 listy print(len(liczby)) 4 Indeks ujemny oznacza liczenie od ko\u0144ca. -1 to ostatni element, -2 przedostatni itd. W praktyce bardzo wygodne przy analizie log\u00f3w, danych pomiarowych albo ostatnich rekord\u00f3w. W C sytuacja wygl\u0105da inaczej. Tablica ma zwykle sta\u0142y rozmiar i konkretny typ danych. J\u0119zyk Kod C int liczby[4] = {10, 20, 30, 40}; C++ int liczby[4] = {10, 20, 30, 40}; Python liczby = [10, 20, 30, 40] W Pythonie lista jest wygodniejsza, ale ma wi\u0119kszy koszt pami\u0119ciowy. Przy bardzo du\u017cych zbiorach danych to zaczyna mie\u0107 znaczenie. Istnieje te\u017c wycinanie fragment\u00f3w listy, czyli slicing. To mechanizm bardzo cz\u0119sto u\u017cywany przy analizie danych. Operacja Kod Wynik Pierwsze trzy elementy print(liczby[:3]) [10, 20, 30] Od drugiego do ko\u0144ca print(liczby[1:]) [20, 30, 40] Co drugi element print(liczby[::2]) [10, 30] Schemat dzia\u0142ania mo\u017cna zapisa\u0107 jako: Wz\u00f3r Znaczenie lista[start:stop:krok] fragment od start do stop &#8211; 1 co krok Brak zrozumienia tego zapisu cz\u0119sto prowadzi do b\u0142\u0119d\u00f3w logicznych, szczeg\u00f3lnie przy sortowaniu i przetwarzaniu fragment\u00f3w danych. R\u00f3\u017cnica mi\u0119dzy list\u0105, krotk\u0105 i klasyczn\u0105 tablic\u0105 oraz wp\u0142yw na wydajno\u015b\u0107 programu Nie ka\u017cda sekwencja danych powinna by\u0107 list\u0105. Python udost\u0119pnia tak\u017ce krotki (tuple) oraz modu\u0142 array, a w obliczeniach numerycznych zwykle u\u017cywa si\u0119 NumPy. Krotka jest niemodyfikowalna. Po utworzeniu nie mo\u017cna zmieni\u0107 jej zawarto\u015bci. To zaleta, gdy dane maj\u0105 pozosta\u0107 sta\u0142e. Struktura Cechy Lista (list) dynamiczna, modyfikowalna Krotka (tuple) niemodyfikowalna, szybsza przy odczycie array jednolity typ danych NumPy array szybkie obliczenia numeryczne Przyk\u0142ad: Typ Kod Lista punkty = [3, 7, 9] Krotka punkty = (3, 7, 9) Je\u015bli program przechowuje miliony warto\u015bci liczbowych, lista mo\u017ce by\u0107 nieefektywna. Ka\u017cdy element listy jest obiektem Pythona, co zwi\u0119ksza zu\u017cycie pami\u0119ci. Dla przyk\u0142adu: Dlatego w analizie danych, uczeniu maszynowym i symulacjach praktycznie standardem jest NumPy. Warto te\u017c pami\u0119ta\u0107 o module array, kt\u00f3ry jest mniej popularny, ale bywa przydatny. Kod Znaczenie from array import array import modu\u0142u a = array(&#8217;i&#8217;, [1, 2, 3, 4]) tablica liczb ca\u0142kowitych Litera 'i&#8217; oznacza typ integer. Dzi\u0119ki temu dane s\u0105 przechowywane oszcz\u0119dniej ni\u017c w zwyk\u0142ej li\u015bcie. Python tablice oraz operacje dodawania usuwania i modyfikacji element\u00f3w Najwi\u0119cej b\u0142\u0119d\u00f3w praktycznych pojawia si\u0119 w\u0142a\u015bnie tutaj: program dzia\u0142a, ale wynik jest z\u0142y, bo element zosta\u0142 dodany nie tam, gdzie trzeba, albo usuni\u0119to niew\u0142a\u015bciwy indeks. Podstawowe operacje trzeba zna\u0107 bez zastanawiania si\u0119. Operacja Kod Efekt Dodanie na ko\u0144cu lista.append(50) dopisanie jednego elementu Dodanie wielu element\u00f3w lista.extend([60, 70]) rozszerzenie listy Wstawienie w \u015brodek lista.insert(1, 15) wstawienie na indeks 1 Usuni\u0119cie po warto\u015bci lista.remove(20) usuwa pierwsze wyst\u0105pienie Usuni\u0119cie po indeksie lista.pop(2) usuwa element o indeksie 2 Czyszczenie lista.clear() usuwa wszystko Przyk\u0142ad w Pythonie: Kod oceny = [3, 4, 5] oceny.append(6) oceny[1] = 5 print(oceny) Wynik: Wynik [3, 5, 5, 6] W C lub C++ takie operacje s\u0105 bardziej r\u0119czne. Trzeba kontrolowa\u0107 rozmiar tablicy i cz\u0119sto kopiowa\u0107 dane. J\u0119zyk Kod C++ vector&lt;int&gt; oceny = {3,4,5}; C++ oceny.push_back(6); W praktyce pocz\u0105tkuj\u0105cy cz\u0119sto u\u017cywaj\u0105 remove() i zak\u0142adaj\u0105, \u017ce usuwa element po indeksie. To b\u0142\u0105d. remove() usuwa po warto\u015bci, a pop() po pozycji. Kolejna pu\u0142apka to modyfikacja listy podczas iteracji: B\u0142\u0119dny kod for x in lista: if x &lt; 0: lista.remove(x) To mo\u017ce pomin\u0105\u0107 cz\u0119\u015b\u0107 element\u00f3w. Bezpieczniej u\u017cywa\u0107 nowej listy: Poprawny kod lista = [x for x in lista if x &gt;= 0] To rozwi\u0105zanie jest prostsze i zwykle bardziej przewidywalne. Iteracja po elementach oraz wyszukiwanie warto\u015bci bez zb\u0119dnych b\u0142\u0119d\u00f3w logicznych Sama obecno\u015b\u0107 danych nie wystarcza. Najcz\u0119\u015bciej trzeba je przeliczy\u0107, sprawdzi\u0107 lub przefiltrowa\u0107. Podstawowa iteracja: Kod for x in liczby: print(x) Gdy potrzebny jest indeks: Kod for i, x in enumerate(liczby): print(i, x) To lepsze ni\u017c r\u0119czne zwi\u0119kszanie licznika. Suma element\u00f3w: Kod suma = sum(liczby) Maksimum i minimum: Kod maks = max(liczby) mini = min(liczby) Sprawdzenie obecno\u015bci: Kod if 20 in liczby: print(&#8222;znaleziono&#8221;) Z\u0142o\u017cono\u015b\u0107 wyszukiwania w li\u015bcie jest liniowa: Operacja Z\u0142o\u017cono\u015b\u0107 odczyt po indeksie O(1) wyszukiwanie warto\u015bci O(n) dodanie na ko\u0144cu \u015brednio O(1) wstawienie na pocz\u0105tek O(n) Przy bardzo du\u017cych danych to ma znaczenie. Je\u015bli stale sprawdzamy obecno\u015b\u0107 elementu, czasem lepszy b\u0119dzie zbi\u00f3r (set) ni\u017c lista. Python tablice przy obliczeniach numerycznych i wsp\u00f3\u0142pracy z bibliotek\u0105 NumPy Przy obliczeniach matematycznych zwyk\u0142a lista szybko staje si\u0119 niewygodna. Dodawanie dw\u00f3ch list nie oznacza dodawania element\u00f3w, tylko ich \u0142\u0105czenie. Kod Wynik [1,2] + [3,4] [1,2,3,4] Dla matematyki to zwykle nie to, czego oczekujemy. Dlatego u\u017cywa si\u0119 NumPy. Kod import numpy as np a = np.array([1, 2, 3]) b = np.array([4, 5, 6]) print(a + b) Wynik: Wynik [5 7 9] To ju\u017c dzia\u0142anie wektorowe. \u015arednia: Kod print(np.mean(a)) Odchylenie standardowe: Kod print(np.std(a)) Wzory wykorzystywane najcz\u0119\u015bciej: Wz\u00f3r Znaczenie \\bar{x} = \\frac{1}{n}\\sum_{i=1}^{n}x_i \u015brednia arytmetyczna s = \\sqrt{\\frac{1}{n}\\sum_{i=1}^{n}(x_i-\\bar{x})^2} odchylenie standardowe x\u02c9=1n\u2211i=1nxi\\bar{x} = \\frac{1}{n}\\sum_{i=1}^{n}x_ix\u02c9=n1\u200b\u2211i=1n\u200bxi\u200b NumPy jest standardem w: Bez tej biblioteki wi\u0119ksze obliczenia szybko staj\u0105 si\u0119 wolne i trudne do utrzymania. Najcz\u0119stsze pu\u0142apki praktyczne i b\u0142\u0119dy, kt\u00f3re kosztuj\u0105 najwi\u0119cej czasu Pierwszy problem to kopiowanie list. Kod Efekt a = [1,2,3] lista \u017ar\u00f3d\u0142owa b = a nie kopia, tylko drugi odno\u015bnik Zmiana b zmienia te\u017c a. Poprawnie: Kod b = a.copy() Drugi problem to domy\u015blne argumenty funkcji. B\u0142\u0119dny kod def dodaj(x, lista=[]): lista.append(x) return lista Lista zostaje zapami\u0119tana mi\u0119dzy wywo\u0142aniami funkcji. Bezpieczniej: Poprawny kod def dodaj(x, lista=None): if lista is None: lista = [] Trzeci problem to przekonanie, \u017ce szybciej znaczy lepiej. Czasem prosty for jest czytelniejszy ni\u017c skomplikowane jednolinijkowe konstrukcje. Kod ma by\u0107 przede wszystkim zrozumia\u0142y za p\u00f3\u0142 roku, nie tylko kr\u00f3tki dzi\u015b. FAQ Czy lista i tablica to dok\u0142adnie to samo? Nie. W codziennej rozmowie cz\u0119sto u\u017cywa si\u0119 tych s\u0142\u00f3w zamiennie, ale technicznie lista w Pythonie jest dynamiczn\u0105 struktur\u0105 obiektow\u0105, a klasyczna tablica z C to zwykle ci\u0105g\u0142y blok pami\u0119ci o sta\u0142ym typie i rozmiarze. Kiedy lepiej u\u017cy\u0107 krotki zamiast listy? Gdy dane nie powinny si\u0119 zmienia\u0107, na przyk\u0142ad wsp\u00f3\u0142rz\u0119dne punktu, sta\u0142e konfiguracje albo warto\u015bci zwracane przez funkcj\u0119. Krotka jest bezpieczniejsza logicznie i zwykle troch\u0119 l\u017cejsza. Czy NumPy zawsze jest lepsze od list? Nie. Dla kilku element\u00f3w zwyk\u0142a lista jest prostsza. NumPy daje du\u017c\u0105 przewag\u0119 przy wi\u0119kszych zbiorach danych i obliczeniach numerycznych wykonywanych masowo. Dlaczego indeksowanie zaczyna si\u0119 od zera? To wynika z historycznej konstrukcji j\u0119zyk\u00f3w programowania i sposobu adresowania pami\u0119ci. Indeks oznacza przesuni\u0119cie od pocz\u0105tku struktury, wi\u0119c pierwszy element ma przesuni\u0119cie r\u00f3wne zero. Czy mo\u017cna przechowywa\u0107 r\u00f3\u017cne typy danych w jednej li\u015bcie? Tak. Python na to pozwala, ale w praktyce cz\u0119sto pogarsza to czytelno\u015b\u0107 kodu i utrudnia przetwarzanie danych. W wi\u0119kszo\u015bci zastosowa\u0144 lepiej zachowa\u0107 sp\u00f3jno\u015b\u0107 typ\u00f3w. Co jest szybsze: lista czy set przy wyszukiwaniu? Dla sprawdzania obecno\u015bci elementu zwykle szybszy jest set, poniewa\u017c operacja ma \u015brednio z\u0142o\u017cono\u015b\u0107 blisk\u0105 O(1), podczas gdy lista wymaga najcz\u0119\u015bciej O(n). Dobra praca z sekwencjami danych nie polega na pami\u0119taniu nazw metod, tylko na rozumieniu kosztu operacji i skutk\u00f3w wyboru struktury. To w\u0142a\u015bnie decyduje, czy program pozostanie prosty i przewidywalny, czy po kilku tygodniach zacznie generowa\u0107 trudne do znalezienia b\u0142\u0119dy. \u0179r\u00f3d\u0142o Foto: Freepik<\/p>\n","protected":false},"author":1,"featured_media":1445,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[27],"tags":[],"class_list":["post-1444","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\/1444","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=1444"}],"version-history":[{"count":1,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/posts\/1444\/revisions"}],"predecessor-version":[{"id":1446,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/posts\/1444\/revisions\/1446"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/media\/1445"}],"wp:attachment":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/media?parent=1444"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/categories?post=1444"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/tags?post=1444"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}