Python ma świetny wbudowany typ listy o nazwie „list”. Literały listy należy wpisać w nawiasach kwadratowych [ ]. Listy działają podobnie do ciągów znaków. Aby uzyskać dostęp do danych, użyj funkcji len() i nawiasów kwadratowych [ ]. Pierwszy element ma indeks 0. (zapoznaj się z oficjalną dokumentacją listy python.org).
colors = ['red', 'blue', 'green'] print(colors[0]) ## red print(colors[2]) ## green print(len(colors)) ## 3
Projekt z znakiem = na listach nie powoduje utworzenia kopii. Zamiast tego przypisanie sprawia, że 2 zmienne wskazują w pamięci jedną listę.
b = colors ## Does not copy the list
„Pusta lista” to po prostu pusta para nawiasów [ ]. Znak „+” dodaje dwie listy, więc [1, 2] + [3, 4] daje [1, 2, 3, 4] (podobnie jak znak + w przypadku ciągów znaków).
FOR i IN
Konstrukcje *for* i *in* w języku Python są bardzo przydatne. Pierwszym zastosowaniem ich w praktyce będzie użycie list. Konstrukcja *for* – for var in list
– umożliwia łatwe przeglądanie każdego elementu na liście (lub w innym zbiorze). Podczas iteracji nie dodawaj ani nie usuwaj listy.
squares = [1, 4, 9, 16] sum = 0 for num in squares: sum += num print(sum) ## 30
Jeśli wiesz, jakiego rodzaju znajduje się na liście, użyj w pętli nazwy zmiennej, która rejestruje te informacje, np. „num”, „name” lub „url”. Ponieważ kod Pythona nie ma innej składni przypominającej o typach, nazwy zmiennych są kluczowym sposobem na zapewnienie sprawności. (Ta odpowiedź może wprowadzać w błąd. Wraz ze wzrostem ekspozycji na język Python pojawią się odniesienia do wskazówki dotyczące wpisywania, które umożliwiają wpisywanie zapytań do definicji funkcji. Python nie korzysta z tych wskazówek dotyczących typów podczas uruchamiania Twoje programy. Są używane przez inne programy, takie jak IDE (zintegrowane środowiska programistyczne) narzędzia do analizy statycznej, takie jak lintery/sprawdzanie pisania, aby sprawdzać, czy funkcje są wywołane; ze zgodnymi argumentami).
Samodzielny konstruktor *in* to prosty sposób na sprawdzenie, czy element pojawia się na liście (lub w innym zbiorze) – value in collection
– sprawdza, czy wartość znajduje się w kolekcji, zwracając wartości Prawda/Fałsz.
list = ['larry', 'curly', 'moe'] if 'curly' in list: print('yay') ## yay
Konstrukcje for/in są bardzo powszechnie używane w kodzie Pythona i działają na typach danych innych niż lista, dlatego warto zapamiętać ich składnię. Być może masz nawyki z innych języków, w których zaczynasz ręcznie iterować kolekcję, a w Pythonie używaj tylko tych języków.
Za pomocą funkcji for/in możesz też pracować nad ciągiem. Ciąg znaków działa jak lista znaków, więc for ch in s: print(ch)
drukuje wszystkie zawarte w nim znaki.
Zakres
Funkcja zakres(n) zwraca liczby 0, 1, ... n-1, a zakres(a; b) zwraca a, a+1, ... b-1 – do ostatniej liczby włącznie. Połączenie funkcji for-loop i range() pozwala utworzyć tradycyjną liczbową pętlę:
## print the numbers from 0 through 99 for i in range(100): print(i)
Istnieje wariant xrange(), który pozwala uniknąć kosztów tworzenia całej listy w przypadku przypadków wrażliwych na wydajność (w Pythonie 3 funkcja zakres() będzie działać dobrze i możesz zapomnieć o funkcji xrange()).
W pętli
W Pythonie jest też standardowa pętla „if”, a instrukcje *break* i *continue* działają tak samo jak w C++ i Javie, zmieniając przebieg najbardziej wewnętrznej pętli. Powyższe pętle „for/in” rozwiązują typowy przypadek iteracji każdego elementu na liście, ale pętla „Podczas” daje Ci pełną kontrolę nad wartościami indeksu. Oto pętla, która uzyskuje dostęp do co 3 elementu na liście:
## Access every 3rd element in a list i = 0 while i < len(a): print(a[i]) i = i + 3
Wyświetlanie listy metod
Oto inne popularne metody tworzenia list.
- list.append(elem) – dodaje pojedynczy element na końcu listy. Typowy błąd: nie zwraca nowej listy, tylko modyfikuje oryginał.
- list.insert(index, elem) – wstawia element o danym indeksie, przesuwając elementy w prawo.
- list.extend(list2) dodaje elementy z listy list2 na końcu listy. Użycie na liście znaków + i += jest podobne do używania funkcji extensions().
- list.index(elem) – wyszukuje dany element na początku listy i zwraca jego indeks. Jeśli element nie występuje, zwraca błąd ValueError (wpisz „in”, aby sprawdzić bez błędu ValueError).
- list.remove(elem) – przeszukuje pierwsze wystąpienie danego elementu i usuwa je (jeśli nie ma wartości, zwraca błąd ValueError).
- list.sort() -- sortuje listę na miejscu (nie zwraca tej listy). (Preferowana jest funkcja sortowana() widoczna później).
- list.reverse() – odwraca obecną listę (nie zwraca tej listy);
- list.pop(index) – usuwa i zwraca element o danym indeksie. Zwraca element znajdujący się najdalej na prawo w przypadku pominięcia indeksu (mniej więcej odwrotnie do funkcji include()).
Zwróć uwagę, że są to *metody* w obiekcie listy, a len() to funkcja, która przyjmuje listę (lub ciąg znaków) jako argument.
list = ['larry', 'curly', 'moe'] list.append('shemp') ## append elem at end list.insert(0, 'xxx') ## insert elem at index 0 list.extend(['yyy', 'zzz']) ## add list of elems at end print(list) ## ['xxx', 'larry', 'curly', 'moe', 'shemp', 'yyy', 'zzz'] print(list.index('curly')) ## 2 list.remove('curly') ## search and remove that element list.pop(1) ## removes and returns 'larry' print(list) ## ['xxx', 'moe', 'shemp', 'yyy', 'zzz']
Typowy błąd: powyższe metody nie zwracają* zmodyfikowanej listy, tylko modyfikują pierwotną listę.
list = [1, 2, 3] print(list.append(4)) ## NO, does not work, append() returns None ## Correct pattern: list.append(4) print(list) ## [1, 2, 3, 4]
Budowanie listy
Jednym z typowych wzorców jest tworzenie listy jako pustej listy [], a następnie dodawanie do niej elementów za pomocą funkcji include() lub rozszerz():
list = [] ## Start as the empty list list.append('a') ## Use append() to add elements list.append('b')
Wyświetlanie listy wycinków
Wycinki działają na listach tak samo jak ciągi znaków. Można ich też używać do zmieniania części listy.
list = ['a', 'b', 'c', 'd'] print(list[1:-1]) ## ['b', 'c'] list[0:2] = 'z' ## replace ['a', 'b'] with ['z'] print(list) ## ['z', 'c', 'd']
Ćwiczenie: list1.py
Aby przećwiczyć materiał z tej sekcji, rozwiąż problemy z list1.py, które nie używają sortowania (z Ćwiczenia podstawowe).