TI

technik informatyk

Start

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 wypadku i), a następnie słowo kluczowe in 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ło d // 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, dla i o wartości równej 0 (d - i - 1) daje 4; dla i o wartości 1, daje 3 – 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.

TI technik informatyk