Python ma świetny wbudowany typ listy o nazwie „list”. Litery listy pisane są w nawiasach kwadratowych [ ]. Listy działają podobnie do ciągów tekstowych – aby uzyskać dostęp do danych, należy użyć funkcji len() oraz nawiasów kwadratowych [ ], przy czym pierwszy element ma wartość 0. (Zapoznaj się z oficjalnymi dokumentacją listy python.org).
colors = ['red', 'blue', 'green'] print(colors[0]) ## red print(colors[2]) ## green print(len(colors)) ## 3
Projekty ze znakiem = na listach nie tworzą kopii. Zamiast tego obie zmienne wskazują jedną listę w pamięci.
b = colors ## Does not copy the list
„Pusta lista” to pusta para nawiasów [ ]. Znak „+” służy do dołączania dwóch list, więc [1, 2] + [3, 4] daje [1, 2, 3, 4] (tak jak + z ciągami znaków).
FOR i IN
W Pythonie bardzo przydatne są konstrukcje *for* i *in*. Zaczniemy je stosować z listami. Konstrukcja *dla* – for var in list
– pozwala łatwo przyjrzeć się poszczególnym elementom na liście (lub innym zbiorze). Nie dodawaj ani nie usuwaj z listy podczas iteracji.
squares = [1, 4, 9, 16] sum = 0 for num in squares: sum += num print(sum) ## 30
Jeśli wiesz, co znajduje się na liście, użyj w pętli nazwy zmiennej, która będzie rejestrować te informacje, np. „num”, „name” lub „url”. Kod w Pythonie nie ma innej składni, która przypominałaby o typach zmiennych, więc nazwy zmiennych są kluczowym sposobem na utrzymanie przejrzystości. (To jest trochę mylące. W miarę poznawania języka Python pojawią się odwołania do wskazówek dotyczących typu, które umożliwiają dodawanie do definicji funkcji informacji o wpisywaniu. Python nie używa tych wskazówek podczas uruchamiania programów. Są używane przez inne programy, takie jak IDE (zintegrowane środowiska programistyczne) i narzędzia do analizy statycznej, takie jak lintery/narzędzia do sprawdzania typów, aby sprawdzić, czy funkcje są wywoływane ze zgodnymi argumentami.
Sam konstrukt *w* pozwala łatwo sprawdzić, czy element występuje na liście (lub w innym zbiorze) – value in collection
sprawdza, czy wartość znajduje się w zbiorze, i zwraca wartość Prawda/Fałsz.
list = ['larry', 'curly', 'moe'] if 'curly' in list: print('yay') ## yay
Konstrukcje for/in są bardzo często używane w kodzie Pythona i działają nad typami danych innymi niż listy, więc należy zapamiętać ich składnię. Być może masz przyzwyczajenia w innych językach, w przypadku których rozpoczynasz ręczną iterację w kolekcji. W Pythonie w języku angielskim używaj po prostu do i w obrębie kolekcji.
Możesz też używać operatora „for/in”, aby pracować nad ciągiem znaków. Ciąg działa jak lista znaków, więc for ch in s: print(ch)
wyświetla wszystkie znaki w danym ciągu.
Zakres
Funkcja zakresu(n) zwraca liczby 0, 1, ... n-1, a zakres(a, b) zwraca a, a+1, ... b-1 – do ostatniej liczby, chociaż bez niej. Połączenie pętli for i funkcji range() pozwala utworzyć tradycyjną pętlę liczbową:
## print the numbers from 0 through 99 for i in range(100): print(i)
Dostępny jest wariant xrange(), który pozwala uniknąć kosztów tworzenia całej listy na potrzeby przypadków wrażliwych na działanie (w Pythonie 3 funkcja range() będzie działać dobrze i nie trzeba będzie zapomnieć o xrange()).
W trakcie odtwarzania
W Pythonie również istnieje standardowa pętla Podczas, a instrukcje *break* i *continue* działają tak jak w C++ i Javie, zmieniając przebieg najbardziej wewnętrznej pętli. Powyższe pętle for/in eliminują typowe przypadki iteracji dla każdego elementu na liście, ale pętla Podczas daje pełną kontrolę nad liczbami indeksu. Oto pętla czasowa, która uzyskuje dostęp do każdego trzeciego 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 kilka innych typowych metod tworzenia list.
- list.append(elem) – dodaje pojedynczy element na końcu listy. Częsty błąd: nie zwraca nowej listy, tylko zmienia oryginał.
- list.insert(index, elem) – wstawia element w danym indeksie, przesuwając elementy w prawo.
- list.extend(list2) dodaje elementy z listy2 na końcu listy. Używanie + lub += na liście jest podobne do korzystania z Ext().
- list.index(elem) – wyszukuje dany element na początku listy i zwraca jego indeks. Jeśli element nie jest wyświetlany, zwraca błąd ValueError (aby sprawdzić element, należy użyć parametru „in”, aby go sprawdzić bez błędu ValueError).
- list.remove(elem) – wyszukuje i usuwa pierwsze wystąpienie danego elementu (w przypadku jego braku zwraca błąd ValueError).
- list.sort() – sortuje listę na miejscu (nie zwraca jej). (preferowana jest funkcja posortowana() wyświetlona później).
- list.reverse() – odwraca listę w miejscu (nie zwraca jej).
- list.pop(index) – usuwa i zwraca element w danym indeksie. Zwraca najbardziej prawą stronę elementu, jeśli pominięto indeks (mniej więcej odwrotność parametru add()).
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']
Częsty błąd: pamiętaj, że 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]
Tworzenie listy
Jednym z typowych wzorców jest utworzenie listy jako pustej listy [], a następnie dodanie do niej elementów za pomocą dodatku add() lub expand():
list = [] ## Start as the empty list list.append('a') ## Use append() to add elements list.append('b')
Wyświetlenie listy wycinków
Wycinki działają na listach tak samo jak ciągi tekstowe i mogą też służyć do zmiany jej części podrzędnych.
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, spróbuj rozwiązać zadania z list1.py, w których nie jest używane sortowanie (w sekcji Ćwiczenia podstawowe).