Listy to uporządkowane, modyfikowalne sekwencje
Lista to najczęściej używany typ kolekcji w Pythonie. Jeśli przechowujesz uporządkowany zestaw wartości, który może się zmieniać (dodawanie, usuwanie, sortowanie, aktualizacja), lista prawie zawsze jest właściwym wyborem.
Tworzysz ją nawiasami kwadratowymi:
Listy mogą przechowywać wszystko, nawet inne listy. W praktyce większość list zawiera jeden rodzaj rzeczy (listę użytkowników, listę liczb), bo tak najłatwiej o nich myśleć.
Indeksowanie
Każdy element ma pozycję, liczoną od 0. Dostęp uzyskujesz nawiasami kwadratowymi:
Odwołanie do nieistniejącego indeksu zgłasza IndexError. Jeśli możesz wyjść poza zakres, najpierw sprawdź długość albo opakuj dostęp w try.
Wycinki (slicing)
Wycinek daje ci zakres elementów. Składnia to list[start:stop:step], tak samo jak w napisach:
Dwie rzeczy, które warto zapamiętać:
- Wycinek zawsze zwraca nową listę. Zmiana wycinka nie wpływa na oryginał.
- Indeks stop nie wchodzi do wyniku:
nums[2:5]daje indeksy 2, 3 i 4, bez 5.
Jak dodawać elementy: append, extend i insert
Trzy metody "dodawania do listy" robią różne rzeczy, a mylenie ich to częste źródło błędów:
append(x)dodajexjako pojedynczy element, nawet jeślixjest listą.items.append([1, 2])dodaje całą listę jako jeden wpis.extend(iterable)dodaje każdy element z obiektu iterowalnego.items.extend([1, 2])dodaje dwa wpisy.insert(i, x)wstawia element pod podany indeks i przesuwa wszystko odiwłącznie o jedną pozycję dalej.
+= z listą po prawej stronie działa jak extend:
A do usuwania:
Jeśli spróbujesz wywołać remove() dla czegoś, czego nie ma na liście, Python zgłosi ValueError. Jeśli potrzebujesz "usuń, jeśli jest", najpierw sprawdź in albo użyj try.
Możesz też usuwać po indeksie przez del:
Długość, przynależność, zliczanie
in to czytelny sposób sprawdzenia, czy lista zawiera wartość. Jeśli będziesz zadawać to pytanie wiele razy dla dużej listy, użyj zamiast niej zbioru: sprawdzenie przynależności w zbiorze to O(1), a w liście O(n).
Sortowanie
Są dwa sposoby i wybór ma znaczenie:
Oba przyjmują reverse=True do sortowania malejąco:
Oraz funkcję key do własnej kolejności:
key jest stosowany do każdego elementu, a porównywany jest jego wynik. Typowe przypadki: sortowanie po długości, po konkretnym atrybucie albo po napisie zamienionym na małe litery.
Odwracanie
Trzy warianty, zależnie od potrzeb:
Zmiany w miejscu używaj, gdy nie potrzebujesz oryginału. Wycinka, gdy chcesz nową kopię. reversed(), gdy chcesz tylko przejść po elementach od końca bez tworzenia nowej listy.
Pułapka wspólnej referencji
Listy są modyfikowalne, a zmienne to referencje. To znaczy, że dwie zmienne mogą wskazywać tę samą listę:
b = a nie skopiowało listy; sprawiło, że b jest drugą nazwą tej samej listy. Jeśli chcesz kopię, poproś o nią wprost:
To zaskakuje każdego programistę Pythona przynajmniej raz. Pamiętaj: = między dwiema listami nie kopiuje.
Pętle i budowanie list
Podstawowy wzorzec znasz już ze strony o pętli for:
To czytelne i zawsze będzie w porządku. Gdy poczujesz się pewniej, odpowiednik w postaci list comprehension robi to samo w jednej linii:
Comprehensions omówimy szczegółowo dwie strony dalej.
Krótka ściąga
Metody, które warto znać, w skrócie:
append(x): dodaje na końcuextend(iter): dodaje każdy element z obiektu iterowalnegoinsert(i, x): wstawia pod indeks ipop()/pop(i): usuwa i zwracaremove(x): usuwa pierwsze wystąpienie xsort()/sort(key=...)/sort(reverse=True)reverse()index(x): pozycja pierwszego xcount(x): liczba wystąpień xcopy(): płytka kopia
Co dalej
Listy to koń pociągowy. Teraz przyjrzymy się krotkom, ich niemodyfikowalnym kuzynom, i temu, kiedy lepiej sięgnąć po krotkę.
Najczęściej zadawane pytania
Jak utworzyć listę w Pythonie?
Użyj nawiasów kwadratowych z wartościami rozdzielonymi przecinkami: fruits = ['apple', 'banana', 'cherry']. Lista może przechowywać dowolne typy i możesz mieszać je w jednej liście, choć z przyzwyczajenia większość prawdziwych list zawiera elementy jednego rodzaju.
Jak posortować listę w Pythonie?
Wywołaj .sort() na liście, żeby posortować ją w miejscu, albo użyj wbudowanej funkcji sorted(list), żeby dostać nową posortowaną listę bez zmieniania oryginału. Obie przyjmują flagę reverse=True do sortowania malejąco i argument key= do własnych kluczy sortowania.
Jak odwrócić listę w Pythonie?
list.reverse() odwraca listę w miejscu. list[::-1] zwraca nową, odwróconą listę. reversed(list) zwraca iterator, po którym możesz przejść pętlą. Wybierz to, czego potrzebujesz: zmianę w miejscu, nową kopię albo leniwą iterację.