Przejdź do głównej treści
eLearner.app
Moduł 3 · Lekcja 1 z 49/36 w kursie~12 min
Lekcje modułu (1/4)

Listy

Lista to uporządkowana i modyfikowalna (mutable) sekwencja elementów. Jest to najczęściej używana struktura danych w Pythonie: tworzy się ją za pomocą [] i modyfikuje za pomocą zestawu metod, które warto zapamiętać.

Tworzenie listy

Python
vuota = []
numeri = [10, 20, 30]
mista = [1, "due", 3.0, True, None]    # różne typy: dozwolone, ale rzadkie

Dostęp przez indeks i wycinanie (slice)

Indeksy zaczynają się od 0. Indeksy ujemne liczone są od prawej strony:

Python
parole = ["a", "b", "c", "d"]
parole[0]    # 'a'
parole[-1]   # 'd'   (ostatni)
parole[1:3]  # ['b', 'c']   slice [start:stop]
parole[::-1] # ['d', 'c', 'b', 'a']   odwrócenie

Wycinek (slice) nigdy nie zgłasza błędu IndexError: jeśli wykracza poza zakres, zwraca pustą podlistę. Dostęp bezpośredni, na przykład parole[10], zgłasza natomiast wyjątek.

Modyfikowanie listy

Python
nums = [1, 2, 3]
nums.append(4)         # [1, 2, 3, 4]    dodaje na końcu
nums.insert(0, 0)      # [0, 1, 2, 3, 4] wstawia na pozycji
nums.extend([5, 6])    # [0, 1, 2, 3, 4, 5, 6]   łączy listy
nums.pop()             # 6   usuwa i zwraca ostatni element
nums.pop(0)            # 0   usuwa i zwraca pierwszy element (wolniejsze: O(n))
nums.remove(3)         # usuwa PIERWSZE wystąpienie wartości 3
nums[1] = 99           # zastępuje element pod indeksem

Sortowanie

Dwie formy — ważne jest, aby je odróżniać:

Python
nums = [3, 1, 4, 1, 5, 9, 2, 6]
nums.sort()          # MODYFIKUJE nums w miejscu (in-place), zwraca None
ordinati = sorted(nums)  # zwraca NOWĄ listę, pozostawia nums bez zmian
nums.sort(reverse=True)
sorted(nums, key=lambda n: -n)   # sortowanie według klucza

Długość, przynależność, iteracja

Python
len(nums)              # ile elementów
3 in nums              # True/False
for n in nums:
    print(n)

Kopiowanie listy

Zapis a = b nie tworzy kopii — tworzy jedynie drugą referencję do tej samej listy. Aby naprawdę skopiować listę:

Python
copia = lista[:]            # pełny wycinek (slice)
copia = list(lista)         # jawny konstruktor
copia = lista.copy()        # metoda

(Wszystkie te metody tworzą kopie płytkie (shallow copies) — zagnieżdżone elementy wciąż są współdzielone.)

Kopiowanie list: uwaga na referencje

W Pythonie, pisząc list_b = list_a, no tworzysz kopii: tworzysz jedynie drugą referencję. Modyfikacja list_b zmieni również list_a. Aby utworzyć prawdziwą, niezależną kopię, musisz napisać list_b = list_a.copy() lub użyć pełnego wycinka: list_b = list_a[:].

Spróbuj sam

Ćwiczenie#python.m3.l1.e1
Próby: 0Ładowanie...

Mając daną listę `nums = [5, 2, 8, 1, 9, 3]`, utwórz zmienną `first_three_sorted` zawierającą pierwsze trzy elementy listy nums posortowane rosnąco. Nie modyfikuj listy nums.

Ładowanie edytora...
Pokaż wskazówkę

nums[:3] daje trzy pierwsze elementy, potem użyj sorted(...).

Rozwiązanie dostępne po 3 próbach

Ćwiczenie powtórzeniowe

Ćwiczenie#python.m3.l1.e2
Próby: 0Ładowanie...

Zaczynając od `words = ['ciao']`, dodaj 'mondo' na koniec, a następnie wstaw '!' na początek. Oceń listę `words`.

Ładowanie edytora...
Pokaż wskazówkę

append na koniec, insert(0, ...) na początek.

Rozwiązanie dostępne po 3 próbach

Dodatkowe wyzwanie

Ćwiczenie#python.m3.l1.e3
Próby: 0Ładowanie...

Mając daną listę `items = [10, 20, 30, 40]`, użyj wycinania (slicing), aby utworzyć nową listę `reversed_items` zawierającą te same elementy, ale w odwrotnej kolejności. Na koniec oceń `reversed_items`.

Ładowanie edytora...
Pokaż wskazówkę

Wycinanie z krokiem ujemnym to [::-1]. Przypisz wynik do reversed_items.

Rozwiązanie dostępne po 3 próbach