Listy Pythona

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

lista ciągów znaków „czerwony”, „niebieski”, „zielony”

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

zarówno kolory, jak i litera b wskazują jedną 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).