łatwyProgramowaniePython

Listy w Pythonie - Niezbędne Operacje na Maturze

15 min czytania
Python
Zaktualizowano: 3.11.2025

Listy w Pythonie to absolutnie najważniejsza struktura danych, jakiej będziesz używać na maturze. Pomyśl o liście jak o uniwersalnym 'pudełku' lub 'segregatorze', do którego możesz wkładać dane (liczby, napisy) w określonej kolejności. Co najważniejsze, możesz je później łatwo przeglądać, dodawać nowe, usuwać, modyfikować i sortować. W Pythonie lista jest dynamiczna, co oznacza, że sama 'rośnie' i 'maleje', kiedy dodajesz (append) lub usuwasz z niej elementy. Nie musisz z góry deklarować jej rozmiaru, co jest niezwykle wygodne. Każde zadanie maturalne, w którym wczytujesz dane z pliku tekstowego (np. 1000 liczb), będzie wymagało od Ciebie stworzenia listy i wczytania tych danych do niej w celu dalszej analizy.

Dlaczego to ważne? Bez list nie rozwiążesz praktycznie żadnego zadania programistycznego na maturze. Służą do przechowywania wszystkich wczytanych danych z pliku, co pozwala na ich wielokrotną analizę (np. znalezienie min/max, sortowanie, szukanie sąsiadów). To Twoje podstawowe narzędzie pracy.

Teoria

Lista (list) w Pythonie to uporządkowana, mutowalna (zmienna) kolekcja obiektów. 'Uporządkowana' oznacza, że elementy mają stałą kolejność. 'Mutowalna' oznacza, że możesz zmieniać jej zawartość (dodawać, usuwać, modyfikować elementy) po jej utworzeniu. Dostęp do elementów odbywa się poprzez indeksy (numery pozycji), liczone zawsze od zera.

Jak to działa?

  1. Tworzenie: Pustą listę tworzysz przez nazwa = [] lub nazwa = list().
  2. Dodawanie na koniec: Używasz metody .append(element). To najczęstsza operacja przy wczytywaniu plików.
  3. Indeksowanie (od 0!): lista[0] to pierwszy element. lista[1] to drugi.
  4. Ostatni element: lista[-1] (bardzo przydatny skrót) lub lista[len(lista) - 1].
  5. Modyfikacja: Po prostu przypisujesz nową wartość do indeksu: lista[0] = 100.
  6. Długość: Funkcja len(lista) zwraca liczbę elementów w liście.
  7. Cięcie (Slicing): lista[a:b] wycina fragment od indeksu a do b-1.

Złożoność: Złożoność czasowa: Dostęp/modyfikacja elementu po indeksie (lista[i]) -> O(1). Dodanie na koniec (.append()) -> O(1) (amortyzowane). Sprawdzenie długości (len()) -> O(1). Przeszukanie listy (x in lista) -> O(n). Sortowanie (.sort()) -> O(n log n).

Implementacja

Tworzenie, append() i dostęp po indeksie

Python
# 1. Tworzenie i dodawanie elementów
liczby = []
liczby.append(10)
liczby.append(20)
liczby.append(30)
print(f"Lista: {liczby}") # [10, 20, 30]

# 2. Dostęp po indeksie (od 0!)
print(f"Pierwszy element: {liczby[0]}") # 10
print(f"Drugi element: {liczby[1]}") # 20

# 3. Modyfikacja elementu
liczby[1] = 99
print(f"Zmieniona lista: {liczby}") # [10, 99, 30]

# 4. Długość listy
print(f"Długość listy: {len(liczby)}") # 3

# 5. Ostatni element
print(f"Ostatni element: {liczby[-1]}") # 30

To są absolutne podstawy. Tworzysz pustą listę `[]`, dodajesz na koniec `.append()`, odczytujesz `[indeks]` i zmieniasz `[indeks] = nowa_wartosc`. `len()` i `[-1]` to funkcje, których będziesz używać cały czas.

Iterowanie (pętle) po liście

Python
dane = [5, 10, 15, 20]

# Sposób 1: Iteracja po WARTOŚCIACH (gdy nie potrzebujesz indeksu)
# Najprostszy i najbardziej 'pythonowy'
print("Iteracja po wartościach:")
for element in dane:
    print(element * 2)

# Sposób 2: Iteracja po INDEKSACH (gdy musisz znać pozycję 'i')
# Niezbędne do analizy sąsiadów (np. dane[i] i dane[i+1])
print("\nIteracja po indeksach:")
for i in range(len(dane)):
    print(f"Indeks {i}, Wartość {dane[i]}")

Masz dwa sposoby na pętlę. `for element in lista:` jest prostszy i lepszy, jeśli chcesz tylko przetworzyć każdą wartość. `for i in range(len(lista)):` jest konieczny, jeśli musisz odwołać się do konkretnego indeksu, np. aby porównać `dane[i]` z `dane[i-1]`.

Cięcie (Slicing) - potężne narzędzie

Python
litery = ['a', 'b', 'c', 'd', 'e', 'f']

# Cięcie [start:stop] (stop nie jest wliczany)
print(litery[1:4]) # ['b', 'c', 'd'] (indeksy 1, 2, 3)

# Od początku do indeksu 3 (bez 3)
print(litery[:3]) # ['a', 'b', 'c']

# Od indeksu 2 do samego końca
print(litery[2:]) # ['c', 'd', 'e', 'f']

# Tworzenie KOPII listy (BARDZO WAŻNE)
kopia_listy = litery[:] # To jest nowa, niezależna lista

# Odwracanie listy
odwrocona = litery[::-1]
print(f"Odwrocona: {odwrocona}") # ['f', 'e', 'd', 'c', 'b', 'a']

Cięcie (slicing) pozwala wycinać fragmenty listy. `lista[:]` to najprostszy sposób na stworzenie *prawdziwej kopii* listy. `lista[::-1]` to magiczny skrót na odwrócenie listy, bardzo przydatny np. przy palindromach.

Ważne metody: .sort(), .pop(), .remove()

Python
liczby = [40, 10, 30, 20]

# 1. .sort() - sortuje listę W MIEJSCU (nic nie zwraca!)
liczby.sort() # Sortuje rosnąco
print(f"Posortowana: {liczby}") # [10, 20, 30, 40]

liczby.sort(reverse=True) # Sortuje malejąco
print(f"Malejąco: {liczby}") # [40, 30, 20, 10]

# 2. .remove(wartosc) - usuwa PIERWSZE wystąpienie danej WARTOŚCI
liczby.remove(30)
print(f"Po remove(30): {liczby}") # [40, 20, 10]

# 3. .pop(indeks) - usuwa element o danym INDEKSIE (i go zwraca)
element = liczby.pop(1) # Usuń element o indeksie 1
print(f"Usunięto: {element}") # 20
print(f"Po pop(1): {liczby}") # [40, 10]

`.sort()` to najważniejsza metoda sortująca, modyfikuje listę na stałe. `.remove()` usuwa po wartości, a `.pop()` usuwa po indeksie. Uważaj na `.sort()` - ono nic nie zwraca (błędem jest `nowa_lista = lista.sort()`).

Przykładowe Zadania Maturalne

Matura 2026Zadanie Zadanie Typu Maturalnego 1

W pliku 'temperatury.txt' znajduje się 365 liczb (każda w nowej linii), oznaczających średnią temperaturę w kolejnych dniach roku. Wczytaj wszystkie dane do listy. Następnie znajdź i wypisz najwyższą oraz najniższą zanotowaną temperaturę.

Wskazówka: Wczytaj wszystkie temperatury z pliku do listy używając pętli FOR i metody .append(). Po wczytaniu całej listy, możesz użyć wbudowanych funkcji min(lista) oraz max(lista).

Pokaż szkic rozwiązania
1. Stwórz pustą listę: `temperatury = []`.
2. Otwórz plik 'temperatury.txt' do odczytu.
3. W pętli `for linia in plik:`:
   a. `temp = float(linia.strip())` (lub int, zależnie od danych).
   b. `temperatury.append(temp)`.
4. Po pętli (gdy wszystkie dane są w liście):
5. Oblicz min i max: `min_temp = min(temperatury)` i `max_temp = max(temperatury)`.
6. Wypisz `min_temp` i `max_temp`.
Matura 2024Zadanie 4.2 (Matura Maj 2024)

W pliku liczby.txt w pierwszym wierszu znajduje się 3000 liczb pierwszych. Napisz program, który spośród liczb z pierwszego wiersza poda liczbę, która jest sto pierwszą liczbą w kolejności, licząc od największej po ich uporządkowaniu.

Wskazówka: To zadanie idealnie pokazuje potęgę list. Wczytaj wszystkie 3000 liczb z pierwszego wiersza do jednej listy. Następnie użyj metody .sort(reverse=True), aby posortować ją malejąco. 'Sto pierwsza' liczba będzie miała indeks 100 (bo liczymy od 0).

Pokaż szkic rozwiązania
1. Otwórz plik 'liczby.txt'.
2. Wczytaj *tylko pierwszy wiersz*: `pierwszy_wiersz = plik.readline()`.
3. Utwórz listę liczb z tego wiersza:
   a. `stringi_liczb = pierwszy_wiersz.split()`.
   b. `liczby = []`.
   c. `for s in stringi_liczb: liczby.append(int(s))`.
   d. (Szybciej: `liczby = [int(s) for s in pierwszy_wiersz.split()]`).
4. Posortuj listę malejąco: `liczby.sort(reverse=True)`.
5. 'Sto pierwsza' liczba jest na pozycji 100 (indeksy: 0, 1, 2... 100).
6. Wypisz: `print(liczby[100])`.

Częste Błędy

Błąd IndexError: list index out of range

Najczęstszy błąd. Próbujesz odwołać się do indeksu, który nie istnieje, np. lista[5] w liście, która ma tylko 3 elementy (indeksy 0, 1, 2). Często zdarza się przy pętlach for i in range(len(lista)) i sprawdzaniu lista[i+1].

Poprawka: Pamiętaj, że ostatni indeks to len(lista) - 1. Jeśli pętla sprawdza lista[i+1], musi się kończyć na range(len(lista) - 1).

nowa_lista = lista.sort()

Metoda .sort() modyfikuje listę 'w miejscu' i nic nie zwraca (zwraca None). Pisząc tak, nowa_lista staje się None, a Ty tracisz swoje dane.

Poprawka: Rób to w dwóch krokach: liczby.sort() (ta linia modyfikuje liczby), a potem print(liczby). Jeśli chcesz nową, posortowaną listę, użyj funkcji nowa_lista = sorted(liczby).

Tworzenie 'kopii' przez lista2 = lista1

To nie tworzy kopii! Obie zmienne (lista1 i lista2) wskazują na ten sam obiekt w pamięci. Zmiana w lista2 magicznie zmienia też lista1.

Poprawka: Aby stworzyć prawdziwą, niezależną kopię, użyj slicingu: lista2 = lista1[:] lub metody .copy(): lista2 = lista1.copy().

Modyfikowanie listy podczas iteracji po niej

Bardzo niebezpieczne. Piszesz for element in lista: if element < 0: lista.remove(element). To psuje pętlę, bo 'gubi' ona indeksy. Pętla for przeskakuje elementy.

Poprawka: Nigdy nie modyfikuj listy, po której iterujesz. Zamiast tego iteruj po kopii (for element in lista[:]) albo stwórz nową, pustą listę i dodawaj do niej tylko te elementy, które chcesz zachować.

Kluczowe Wnioski

  • Listy w Pythonie są mutowalne (można je zmieniać) i dynamiczne (same rosną).
  • Indeksowanie ZAWSZE zaczyna się od 0. Ostatni element to lista[-1].
  • Do dodawania na koniec służy .append(element).
  • Do wczytania danych z pliku: stwórz pustą listę [] i użyj pętli for z .append().
  • Do sortowania w miejscu użyj .sort(). Do stworzenia nowej posortowanej kopii użyj nowa = sorted(stara).
  • Aby skopiować listę, użyj kopia = lista[:] lub kopia = lista.copy().
  • Funkcje len(), min(), max(), sum() są twoimi najlepszymi przyjaciółmi.

Najczęściej Zadawane Pytania

Jaka jest różnica między listą a krotką (tuple)?

Krotka (ang. `tuple`, np. `(1, 2)`) jest jak lista, ale jest *niemutowalna* (niezmienna). Po stworzeniu krotki nie możesz zmienić jej elementów, dodać ani usunąć. Listy (`[]`) są w pełni edytowalne. Na maturze 99% czasu będziesz używać list.

Jaka jest różnica między `.sort()` a `sorted()`?

`.sort()` to *metoda* listy. Modyfikuje listę 'w miejscu' i nic nie zwraca (zwraca `None`). `sorted()` to *funkcja*. Przyjmuje listę jako argument, *zwraca nową*, posortowaną listę i *nie zmienia* oryginału.

Jak szybko sprawdzić, czy element jest w liście?

Użyj operatora `in`. Jest to bardzo czytelne: `if 5 in moja_lista: print("Znaleziono!")`. Pamiętaj tylko, że ma to złożoność O(n) (musi przejrzeć listę).

Jak połączyć dwie listy?

Użyj operatora `+`. `lista3 = lista1 + lista2`. To tworzy nową, trzecią listę. Jeśli chcesz dodać elementy `listy2` na koniec `listy1` (modyfikując `lista1`), użyj `lista1.extend(lista2)`.

Chcesz opanować wszystkie tematy maturalne?

Dołącz do kursu i zyskaj dostęp do interaktywnych lekcji, edytora kodu i setek zadań.

Powiązane Tematy