Stwórzmy zmienną o nazwie liczby
; ma ona przypisaną nie jedną liczbę, ale jest wypełniona listą (ang. list) składającą się z pięciu wartości (uwaga: lista zaczyna się od nawiasu otwierającego i kończy się nawiasem zamykającym; przestrzeń między nawiasami kwadratowymi jest wypełniona pięcioma liczbami oddzielonymi przecinkami).
liczby = [10, 5, 7, 2, 1]
Elementy wewnątrz listy mogą mieć różne typy. Niektóre z nich mogą być liczbami całkowitymi, inne to liczby zmiennoprzecinkowe, a jeszcze inne mogą być listami.
Język Python przyjął następującą konwencję: elementy na liście są zawsze ponumerowane od zera. Oznacza to, że element przechowywany na początku listy będzie miał numer zero. Ponieważ na naszej liście znajduje się pięć elementów, ostatni z nich ma przypisany numer cztery. Nasza lista to zbiór elementów, ale każdy element jest skalarem.
Przypiszmy nową wartość 111
do pierwszego elementu elementu na liście. Robimy to w ten sposób:
liczby[0] = 111
Możemy przypisać wartości do innych elementów listy:
liczby[2] = 120
liczby[1] = liczby[4]
Funkcja len()
Długość listy może się różnić podczas wykonywania kodu. Nowe elementy mogą zostać dodane do listy, a inne mogą zostać z niej usunięte. Oznacza to, że lista jest bardzo dynamicznym tworem. Jeśli chcesz sprawdzić aktualną długość listy, możesz użyć funkcji o nazwie len()
(jej nazwa pochodzi od angielskiego słowa length - długość). Funkcja przyjmuje nazwę listy jako argument i zwraca liczbę elementów aktualnie przechowywanych w liście (innymi słowy – długość listy).
len(liczby)
Usuwanie elementów z listy
Każdy z elementów listy może zostać usunięty w dowolnym momencie – odbywa się to za pomocą instrukcji del
(ang. delete, czyli usuń). Uwaga: to instrukcja, a nie funkcja.
Musisz wskazać element do usunięcia – zniknie on z listy, a długość listy zostanie zmniejszona o jeden.
liczby = [10, 5, 7, 2, 1] del liczby[1] print(len(liczby)) print(liczby)
Indeksy ujemne są dozwolone
Element z indeksem równym -1
jest ostatnim na liście.
Podobnie, element o indeksie równym -2
jest jest przedostatnim na liście.
liczby = [111, 7, 2, 1] print(liczby[-1]) print(liczby[-2])
Dodawanie elementów do listy: metody append() i insert()
Metoda jest specyficznym rodzajem funkcji - zachowuje się jak funkcja i wygląda jak funkcja, ale różni się sposobem działania i sposobem wywołania.
Funkcja nie należy do żadnych danych - pobiera dane, może tworzyć nowe dane i generalnie daje wynik.
Metoda robi wszystkie te rzeczy, ale jest również w stanie zmienić stan wybranej jednostki.
Metoda jest własnością danych, na których operuje, podczas gdy funkcja jest własnością całego kodu.
Nowy element może być przyklejony do końca istniejącej listy:
lista.append(wartość)
Taką operację wykonuje się za pomocą metody o nazwie append()
. Przyjmuje ona wartość argumentu i umieszcza go na końcu listy do której należy ta metoda.
Długość listy wzrasta o jeden.
Metoda insert()
jest nieco mądrzejsza – może dodać nowy element w dowolnym miejscu na liście, nie tylko na końcu.
lista.insert(miejsce, wartość)
Wymaga ona dwóch argumentów:
- pierwszy pokazuje wymaganą lokalizację wstawianego elementu; uwaga: wszystkie istniejące elementy, które zajmują lokalizacje po prawej stronie nowego elementu (w tym ten we wskazanej pozycji) przesuwają się w prawo, aby zrobić miejsce na nowy element,
- drugi to element do wstawienia.
liczby = [111, 7, 2, 1] print(len(liczby)) print(liczby) ### liczby.append(4) print(len(liczby)) print(liczby) ### liczby.insert(0, 222) print(len(liczby)) print(liczby)
Możesz stworzyć pustą listę (odbywa się to za pomocą pustej pary nawiasów kwadratowych), a następnie dodawać w razie potrzeby nowe elementy.
moja_lista = [] # Tworzenie pustej listy. for i in range(5): moja_lista.append(i + 1) print(moja_lista)
Korzystanie z list
moja_lista = [10, 1, 8, 3, 5] suma = 0 for i in moja_lista: sum += i print(suma)
- pętla
for
określa zmienną używaną do przeglądania listy (w tym wypadkui
), a następnie słowo kluczowein
i nazwę przetwarzanej listy (moja_lista
) - zmiennej
i
są przypisane wartości wszystkich kolejnych elementów listy, a proces odbywa się tyle razy, ile jest elementów na liście, - oznacza to, że używasz zmiennej
i
jako kopii wartości elementów i nie musisz używać indeksów.
Możesz łatwo zamienić elementy listy, aby odwrócić ich kolejność:
lista = [10, 1, 8, 3, 5] lista[0], lista[4] = lista[4], lista[0] lista[1], lista[3] = lista[3], lista[1] print(lista)
Możemy to samo zrobić dla listy, niezależnie od jej długości.
lista = [10, 1, 8, 3, 5] d = len(lista) for i in range(d // 2): lista[i], lista[d - i - 1] = lista[d - i - 1], lista[i] print(lista)
- przypisaliśmy zmiennej
d
bieżącą długością listy (dzięki temu nasz kod jest nieco bardziej przejrzysty i krótszy) - uruchomiliśmy pętlę
for
, aby przeszła przez ciałod // 2
razy (działa to z powodzeniem dla list o parzystych i nieparzystych długościach, ponieważ gdy lista zawiera nieparzystą liczbę elementów, środkowy pozostaje nietknięty) - zamieniliśmy enty element
i
(from the beginning of the list) (z początku listy) z elementem z indeksem równym(d - i - 1)
(od końca listy); w naszym przykładzie, dlai
o wartości równej0
(d - i - 1)
daje4
; dlai
o wartości1
, daje3
– dokładnie tego potrzebowaliśmy.
Listy (i wiele innych złożonych elementów języka Pythona) są przechowywane inaczej niż zwykłe (skalarne) zmienne. Nazwa listy jest nazwą miejsca w pamięci, w którym przechowywana jest lista.
lista_1 = [1] lista_2 = lista_1 lista_1[0] = 2 print(lista_2)
Wycinki
Wycinek to element składni języka Python, który umożliwia tworzenie zupełnie nowej kopii listy lub jej części. W rzeczywistości kopiuje zawartość listy, a nie nazwę listy.
lista_1 = [1] lista_2 = lista_1[:] lista_1[0] = 2 print(lista_2)
Ta niepozorna część kodu opisana jako [:]
jest w stanie stworzyć zupełnie nową listę.
Jedna z najbardziej ogólnych postaci wycinka wygląda następująco:
lista[start:end]
# Kopiowanie całej listy. lista_1 = [1] lista_2 = lista_1[:] lista_1[0] = 2 print(lista_2) # Kopiowanie części listy. lista = [10, 8, 6, 4, 2] nowa_lista = lista[1:3] print(nowa_lista) #Wycinki z ujemnymi indeksami lista = [10, 8, 6, 4, 2] nowa_lista = lista[1:-1] print(nowa_lista)
Opisana wcześniej instrukcja del
może usunąć więcej niż tylko jeden element listy na raz – może również usunąć wycinki:
lista = [10, 8, 6, 4, 2] del lista[1:3] print(lista)
Operatory in i not in
Język Python oferuje dwa bardzo potężne operatory, które mogą przeglądać listę w celu sprawdzenia, czy określona wartość jest przechowywana na liście, czy nie.
Pierwszy z nich (in
) sprawdza, czy dany element (jego lewy argument) jest aktualnie przechowywany gdzieś wewnątrz listy (prawy argument) – operator podaje True
w tym przypadku.
Drugi (not in
) sprawdza, czy dany element (jego lewy argument) jest nieobecny na liście – operator zwraca True
w tym przypadku.
lista = [0, 3, 12, 8, 2] print(5 in lista) print(5 not in lista) print(12 in lista)
Listy w listach
Do tej pory mówiliśmy, że listy składają się ze skalarów (mianowicie liczb), ale w rzeczywistości listy mogą zawierać elementy o znacznie bardziej złożonej strukturze.
Wyrażenie listowe jest listą tworzoną „w biegu” podczas wykonywania programu, nie opisaną statycznie. Wyrażenie:
kwadraty = [x ** 2 for x in range(10)]
tworzy listę 10-elementową wypełnioną kwadratami (drugą potęgą) liczb całkowitych, począwszy od zera (0, 1, 4, 9, 16, 25, 36, 49, 64, 81)
dwojki = [2 ** i for i in range(8)]
tworzy 8-elementową tablicę zawierającą pierwsze osiem wyników operacji podnoszenia liczby 2 do kolejnych potęg (1, 2, 4, 8, 16, 32, 64, 128)
nieparzyste = [x for x in kwadraty if x % 2 != 0 ]
tworzy listę zawierającą tylko nieparzyste elementy listy kwadraty list.
Poniżej przykład dwuwymiarowej tablicy reprezentującej szachownicę:
PUSTY = "-" WIEZA = "WIEZA" szachownica = [] for i in range(8): rzad = [PUSTY for i in range(8)] szachownica.append(rzad) szachownica[0][0] = WIEZA szachownica[0][7] = WIEZA szachownica[7][0] = WIEZA szachownica[7][7] = WIEZA print(szachownica)
Język Python nie ogranicza głębokości zawierania listy w liście. Możemy tworzyć listy bardziej rozbudowane.