ł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