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
vuota = []
numeri = [10, 20, 30]
mista = [1, "due", 3.0, True, None] # różne typy: dozwolone, ale rzadkieDostęp przez indeks i wycinanie (slice)
Indeksy zaczynają się od 0. Indeksy ujemne liczone są od prawej strony:
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ócenieWycinek (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
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 indeksemSortowanie
Dwie formy — ważne jest, aby je odróżniać:
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 kluczaDługość, przynależność, iteracja
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ę:
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
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.
Pokaż wskazówkę
nums[:3] daje trzy pierwsze elementy, potem użyj sorted(...).
Rozwiązanie dostępne po 3 próbach
Ćwiczenie powtórzeniowe
Zaczynając od `words = ['ciao']`, dodaj 'mondo' na koniec, a następnie wstaw '!' na początek. Oceń listę `words`.
Pokaż wskazówkę
append na koniec, insert(0, ...) na początek.
Rozwiązanie dostępne po 3 próbach
Dodatkowe wyzwanie
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`.
Pokaż wskazówkę
Wycinanie z krokiem ujemnym to [::-1]. Przypisz wynik do reversed_items.
Rozwiązanie dostępne po 3 próbach