Dataniedziela, 9 sierpnia 2026 Czas07:03:03
← Python — programowanie

Lekcja 6. Listy, krotki i słowniki w Pythonie — kolekcje danych

Średni

Po co się tego uczymy?

Pojedyncze zmienne z pierwszej lekcji tego działu wystarczają do jednej wartości — ale prawdziwe programy przetwarzają CAŁE zbiory danych: listę ocen klasy, bazę produktów w sklepie, słownik tłumaczeń. Listy, krotki i słowniki to trzy podstawowe struktury danych Pythona — bez nich żaden poważniejszy program (w tym każdy algorytm z działu obok) nie mógłby powstać.

Teoria

Lista (list, zapis []) — uporządkowany, MODYFIKOWALNY zbiór elementów, indeksowany od 0. Najważniejsze operacje: lista[i] (odczyt elementu o indeksie i), lista[-1] (ostatni element — ujemne indeksy liczą OD KOŃCA), lista[i] = x (zmiana elementu), append(x) (dodanie na koniec), insert(i, x) (wstawienie na pozycję i), pop() (usunięcie i zwrócenie ostatniego elementu), remove(x) (usunięcie PIERWSZEGO wystąpienia wartości x), len(lista) (długość), sort() (sortowanie rosnąco W MIEJSCU), x in lista (sprawdzenie przynależności).

Krotka (tuple, zapis ()) — działa jak lista (indeksy, len(), in, pętla for), ale jest NIEMODYFIKOWALNA — po utworzeniu nie da się zmienić, dodać ani usunąć elementu. Używa się jej, gdy dane MAJĄ pozostać stałe (np. współrzędne punktu, dni tygodnia) — daje to też pewność, że żadna część programu przypadkiem ich nie zmieni.

Słownik (dict, zapis {}) — przechowuje dane w PARACH klucz:wartość, zamiast indeksów liczbowych używa DOWOLNYCH kluczy (najczęściej tekstowych). Klucze w jednym słowniku MUSZĄ być unikalne. Operacje: slownik["klucz"] (odczyt — rzuci błąd KeyError, jeśli klucza nie ma), slownik.get("klucz", domyslna) (bezpieczny odczyt z wartością domyślną, gdy klucza brak), slownik["klucz"] = wartość (dodanie/zmiana), del slownik["klucz"] (usunięcie), .keys()/.values()/.items() (odpowiednio: same klucze, same wartości, PARY klucz-wartość).

Kiedy użyć czego? Lista — gdy kolejność ma znaczenie i dane będą się zmieniać (np. lista zadań do zrobienia). Krotka — gdy dane są STAŁYM zestawem, który nie powinien się zmieniać (np. wymiary ekranu (1920, 1080)). Słownik — gdy dane naturalnie opisuje się NAZWANYMI polami, a nie kolejnością (np. dane jednej osoby: imię, wiek, klasa).

List comprehension (składanie list) — zwarty, "pythonowy" sposób tworzenia nowej listy na podstawie innej, w JEDNEJ linijce: kwadraty = [x**2 for x in range(1, 6)] daje [1, 4, 9, 16, 25] — to skrót dla pętli for, która tworzyłaby tę samą listę przez wielokrotne append(). Można też dodać warunek: parzyste = [x for x in range(20) if x % 2 == 0].

Schemat

LISTA []          KROTKA ()          SŁOWNIK {}
[10, 20, 30]        (10, 20, 30)        {"imie": "Zosia",
  indeks: 0,1,2       indeks: 0,1,2        "wiek": 17}
MOŻNA zmieniać     NIE MOŻNA zmieniać    dostęp przez KLUCZ,
append/insert/pop  (tylko odczyt)        nie indeks

LIST COMPREHENSION:
zwykła pętla:                    składanie list (jedna linijka):
wynik = []                       wynik = [x**2 for x in range(1,6)]
for x in range(1, 6):
    wynik.append(x**2)
→ oba dają: [1, 4, 9, 16, 25]

Przykład z życia

Dziennik elektroniczny przechowuje oceny ucznia jako LISTĘ (bo dochodzą nowe oceny przez cały rok), dane osobowe ucznia jako SŁOWNIK (imię, nazwisko, klasa — dostęp przez nazwę pola, nie numer), a datę urodzenia jako KROTKĘ (dzień, miesiąc, rok) — te trzy dane nie powinny się nigdy przypadkiem zmienić w trakcie działania programu.

listy_krotki_slowniki.py

# LISTA - modyfikowalna kolekcja
oceny = [4, 5, 3, 5, 6]
print("Oceny:", oceny)
print("Pierwsza ocena:", oceny[0])
print("Ostatnia ocena:", oceny[-1])

oceny.append(4)              # dodaj nową ocenę na koniec
print("Po dodaniu:", oceny)

srednia = sum(oceny) / len(oceny)
print(f"Średnia: {srednia:.2f}")

# KROTKA - niemodyfikowalna
wspolrzedne = (52.2297, 21.0122)   # Warszawa: szerokość, długość
print("Współrzędne:", wspolrzedne)
# wspolrzedne[0] = 10   # BŁĄD! Krotki nie można zmieniać

# SŁOWNIK - dane opisane nazwanymi kluczami
uczen = {
    "imie": "Zosia",
    "wiek": 17,
    "klasa": "3A"
}
print("Imię:", uczen["imie"])
uczen["wiek"] = 18             # zmiana wartości
uczen["email"] = "zosia@szkola.pl"   # dodanie nowego klucza
print("Po zmianach:", uczen)

# LIST COMPREHENSION - zwarte tworzenie listy
kwadraty = [x**2 for x in range(1, 6)]
print("Kwadraty:", kwadraty)

iteracja_po_kolekcjach.py

# Pętla po liście, krotce i słowniku
oceny = [4, 5, 3, 5, 6]
for ocena in oceny:
    print(ocena, end=" ")
print()

wspolrzedne = (52.2297, 21.0122)
for wspolrzedna in wspolrzedne:
    print(wspolrzedna)

uczen = {"imie": "Zosia", "wiek": 17, "klasa": "3A"}
for klucz, wartosc in uczen.items():
    print(f"{klucz}: {wartosc}")

# Bezpieczny odczyt ze słownika - get() z wartością domyślną
telefon = uczen.get("telefon", "brak danych")
print(f"Telefon: {telefon}")   # nie rzuci błędu, mimo że klucza nie ma

Komentarz i wyjaśnienie kodu

oceny[-1] to charakterystyczna dla Pythona składnia UJEMNEGO indeksowania — -1 zawsze oznacza OSTATNI element, -2 przedostatni, itd. — wygodniejsze niż pisanie oceny[len(oceny) - 1].

uczen.get("telefon", "brak danych") to BEZPIECZNY sposób odczytu z słownika — gdyby użyć uczen["telefon"] dla klucza, którego nie ma, program rzuciłby błąd KeyError i się zatrzymał; .get() zamiast tego zwraca podaną wartość domyślną.

for klucz, wartosc in uczen.items(): to najwygodniejszy sposób przejścia po słowniku, gdy potrzebujesz OBU elementów pary naraz — .items() zwraca każdą parę jako krotkę, którą Python automatycznie "rozpakowuje" do dwóch zmiennych pętli.

Ćwiczenie samodzielne

Uruchom kod i dodaj do słownika uczen nowy klucz "przedmioty" zawierający LISTĘ ulubionych przedmiotów (np. ["matematyka", "informatyka"]) — to pokazuje, że słowniki i listy można ZAGNIEŻDŻAĆ jedne w drugich.

Plac zabaw — wypróbuj online

Poniższy kod wykonuje się od razu w Twojej przeglądarce — nic nie trzeba instalować. Zmień kod i kliknij „Uruchom”.

PYTHON

Zadania do pracy własnej

  1. Utwórz listę pięciu swoich ulubionych filmów (jako teksty). Wypisz ją całą, a potem osobno pierwszy i ostatni element.

  2. Utwórz słownik opisujący siebie (imię, wiek, miasto, hobby jako lista) i wypisz wszystkie informacje w czytelnej formie, używając pętli for klucz, wartosc in ...items():. Dodaj nowy klucz i zmień wartość jednego z istniejących.

  3. Napisz program zarządzający prostą listą zakupów jako listą SŁOWNIKÓW — każdy produkt to słownik z kluczami "nazwa" i "cena" (np. {"nazwa": "mleko", "cena": 3.50}). Program powinien: wypisać wszystkie produkty, obliczyć sumę wszystkich cen (pętla for po liście słowników, suma += produkt["cena"]), i znaleźć NAJDROŻSZY produkt (analogicznie do wzorca "znajdź maksimum" z lekcji o pętli for).

Typowe błędy

Próba zmiany elementu krotki (krotka[0] = x) — rzuci błąd TypeError, bo krotki są celowo niemodyfikowalne; jeśli potrzebujesz zmieniać dane, użyj listy.

Odczyt nieistniejącego klucza słownika przez [] zamiast .get()slownik["klucz"] dla brakującego klucza rzuci KeyError i zatrzyma program; jeśli klucz MOŻE nie istnieć, zawsze używaj .get() z wartością domyślną.

Mylenie list.sort() (sortuje W MIEJSCU, zwraca None) z sorted(list) (zwraca NOWĄ, posortowaną listę, oryginał bez zmian) — próba lista = lista.sort() "kasuje" listę, zamieniając ją na None, bo sort() nic nie zwraca (modyfikuje oryginał bezpośrednio).

Nawiązanie do egzaminu zawodowego

Listy i słowniki to podstawa niemal każdego bardziej złożonego zadania na maturze rozszerzonej — od prostego przetwarzania danych po struktury używane w dziale "Algorytmy i złożoność" (stos, kolejka, grafy reprezentowane jako słownik list sąsiadów). To domyka fundament Pythona — od tej lekcji jesteś gotów/gotowa na algorytmy z sąsiedniego działu.