Serce programowania maturalnego. Naucz się zarządzać kolekcjami danych za pomocą list, słowników i zbiorów, by drastycznie skrócić swój kod.
Wstęp: Kontenery na Twoje dane
Samymi pojedynczymi zmiennymi (jak x = 5) nie rozwiążesz zadania maturalnego, w którym musisz przeanalizować tysiące liczb. Potrzebujesz "kontenerów", które pomieszczą te informacje i pozwolą na nich masowo operować. Python posiada potężne wbudowane struktury danych, które na maturze często zastępują pisanie setek linijek skomplikowanego kodu.
📦 Spis treści: Kolekcje
1
Listy (Tablice 1D): Twoje główne narzędzie
Lista to uporządkowana kolekcja elementów, którą w Pythonie zapisujemy w nawiasach kwadratowych []. Jej największą zaletą jest dynamika – może swobodnie rosnąć i maleć w trakcie działania programu.
L = [10, 20, 30]
# Dodawanie na koniec listy
L.append(40) # [10, 20, 30, 40]
# Usuwanie konkretnej wartości (pierwsze wystąpienie)
L.remove(20) # [10, 30, 40]
# Usuwanie po indeksie (i opcjonalne pobranie wartości)
ostatni = L.pop() # Usuwa i zwraca 40. L to teraz [10, 30]
wyniki = [14, 2, 89, 5]
print(len(wyniki)) # Zwróci 4 (Rozmiar listy)
print(max(wyniki)) # Zwróci 89 (Największa wartość)
print(min(wyniki)) # Zwróci 2 (Najmniejsza wartość)
print(sum(wyniki)) # Zwróci 110 (Suma wszystkich)
lista[start:stop:krok].# Indeksowanie (w tym ujemne!)
k = ["A", "B", "C", "D", "E"]
k[0] # "A" (Pierwszy element)
k[2] # "C" (Trzeci element)
k[-1] # "E" (Ostatni element - super przydatne!)
k[-2] # "D" (Przedostatni)
# Slicing [start:stop:krok]
k[1:4] # ["B", "C", "D"] (od 1 włącznie, do 4 bez)
k[:3] # ["A", "B", "C"] (od początku do 3)
k[2:] # ["C", "D", "E"] (od 2 do samego końca)
k[::2] # ["A", "C", "E"] (cała lista, co drugi element)
k[::-1] # ["E", "D", "C", "B", "A"] (ODWRACANIE!)
Na egzaminie notorycznie pojawiają się zadania typu "sprawdź, czy dane słowo jest palindromem" (czyta się tak samo od lewej do prawej). W C++ wymaga to pisania pętli. W Pythonie, dzięki slicingowi i odwracaniu za pomocą kroku -1, sprawdzisz to jedną linijką!
slowo = "kajak"
if slowo == slowo[::-1]:
print("To jest palindrom!")
2
Tablice 2D (Listy w listach): Maturalny klasyk
Zadania polegające na obróbce "obrazków" (siatek pikseli), plansz do gry w życie czy map wysokościowych to absolutne klasyki CKE. W Pythonie nie ma wbudowanego, specjalnego typu macierzowego. Takie struktury budujemy, tworząc listę, wewnątrz której znajdują się kolejne listy (reprezentujące wiersze).
Na początku zadania często musisz stworzyć pustą planszę (np. wypełnioną zerami). NIGDY nie rób tego przez mnożenie list: [[0]*5]*5! W Pythonie skopiuje to tylko referencje (wskaźniki) do jednego wiersza – zmiana elementu w jednym wierszu zmieni go we wszystkich! Używaj List Comprehension.
# PRAWIDŁOWE tworzenie tablicy np. 3x3
N = 3
plansza = [[0 for _ in range(N)] for _ in range(N)]
# Dostęp do elementów: tablica[wiersz][kolumna]
plansza[0][0] = 1 # Lewy górny róg
plansza[2][2] = 9 # Prawy dolny róg
Aby przejrzeć lub zmodyfikować każdy element planszy, potrzebujesz dwóch pętli for. Jedna odpowiada za poruszanie się po wierszach (od góry do dołu), a druga, wewnętrzna, po kolumnach w danym wierszu (od lewej do prawej).
# i - to zazwyczaj wiersz (y)
# j - to zazwyczaj kolumna (x)
for i in range(len(plansza)):
for j in range(len(plansza[i])):
# np. zerowanie parzystych elementów
if plansza[i][j] % 2 == 0:
plansza[i][j] = 0
Na lekcjach matematyki przywykłeś, że współrzędne to (X, Y), gdzie X idzie poziomo, a Y pionowo. W informatyce, przy tablicach 2D, zapis jest odwrotny!
Używając zapisu tablica[A][B], pierwsza wartość A wybiera listę zewnętrzną, czyli wiersz (odpowiednik Y). Druga wartość B wybiera pozycję w tym wierszu, czyli kolumnę (odpowiednik X). Zapamiętaj: najpierw w dół, potem w prawo. Zawsze tablica[Y][X]!
3
Słowniki: Mistrzowie zliczania (dict)
Wyobraź sobie zadanie: "Podaj, ile razy wystąpiła każda z liter w pliku składającym się z 10 000 wierszy". Zamiast pisać 26 zmiennych (dla każdej litery alfabetu osobno), używamy słownika. Słownik przechowuje dane w parach: Klucz : Wartość.
{ }. Klucz musi być unikalny (nie mogą istnieć dwa takie same klucze) i niemodyfikowalny (np. liczba lub string).# Pusty słownik
oceny = {}
# Dodawanie / Zmiana wartości po kluczu
oceny["Kowalski"] = 5
oceny["Nowak"] = 4
oceny["Kowalski"] = 3 # Nadpisze poprzednią wartość!
print(oceny) # {'Kowalski': 3, 'Nowak': 4}
+1 do klucza, który jeszcze nie istnieje. Metoda .get(klucz, domyślna_wartość) rozwiązuje ten problem.litery = ['A', 'B', 'A', 'C', 'B', 'A']
licznik = {}
for znak in litery:
# Jeśli klucza nie ma, weź 0. Dodaj 1.
licznik[znak] = licznik.get(znak, 0) + 1
print(licznik) # {'A': 3, 'B': 2, 'C': 1}
# Metoda .items() (Klucz i Wartość naraz)
najczestsze = ""
max_wystapien = 0
for klucz, wartosc in licznik.items():
if wartosc > max_wystapien:
max_wystapien = wartosc
najczestsze = klucz
.keys() iteruje tylko po kluczach (domyślne zachowanie pętli)..values() iteruje tylko po wartościach..items() to maturalny niezbędnik. Zwraca parę (klucz, wartość) przy każdym obrocie pętli, co ułatwia wszelkie wyszukiwania ekstremów.4
Zbiory (set): Strażnicy unikalności
Zbiory w Pythonie (typ set) działają dokładnie tak samo, jak zbiory na lekcjach matematyki. Nie mają ustalonej kolejności (nie możesz użyć indeksu zbior[0]), ale za to ich najważniejszą cechą jest to, że nie pozwalają na istnienie duplikatów.
Najczęstsze zastosowanie zbiorów to błyskawiczne "wyczyszczenie" listy z powtarzających się elementów. Wystarczy rzutować listę na zbiór, a potem... z powrotem na listę!
# Mamy listę z powtórzeniami
liczby = [1, 2, 2, 3, 1]
# Rzutowanie na zbiór bezpowrotnie niszczy duplikaty
zbior = set(liczby)
print(zbior) # Wynik: {1, 2, 3}
# Wracamy do postaci listy (jeśli potrzebujemy indeksów)
czysta_lista = list(zbior)
Gdy używasz operatora in (sprawdzanie czy element jest wewnątrz) na tradycyjnej liście, Python musi przeszukać ją po kolei. W przypadku set, odpowiedź jest natychmiastowa niezależnie od tego, czy zbiór ma 5 elementów, czy 5 milionów!
# Pusty zbiór tworzymy za pomocą set() (a nie {}!)
widziane = set()
# Dodawanie do zbioru (zamiast .append jest .add)
widziane.add("MATURA")
if "MATURA" in widziane:
print("Już to słowo analizowaliśmy!")
Gdy w zadaniu pojawia się sformułowanie: "Podaj, ile różnych (unikalnych) słów / znaków znajduje się w pliku", używamy natychmiastowego kombo funkcji len() oraz set().
ile_roznych = len(set(nasza_dluga_lista_z_pliku))
Masz już wszystkie narzędzia, aby zapanować nad tysiącami linijek danych z arkuszy maturalnych. Znasz pętle, pliki i kolekcje. Pora zaprząc je do pracy i poznać najważniejsze algorytmy liczbowe.
Przejdź do: Klasyczne Algorytmy Liczbowe ➡️