Czym jest lista?
Lista jest jednym z wbudowanych typów danych w Pythonie i służy do przechowywania wielu elementów w jednej zmiennej. Język Python dostarcza szereg użytecznych funkcji, które pozwalają na efektywne wykonywanie operacji na danych zawartych w listach. Umiejętność korzystania z list jest niezbędna dla każdego programisty.
Tworzenie list w języku Python
Aby utworzyć listę w Pythonie, używamy nawiasów kwadratowych ([]), tak jak w poniższym przykładzie:
lista_owocow = ["jablko", "banan", "gruszka"]
W powyższym przykładzie stworzyliśmy listę trzech elementów typu tekstowego (string).
Możemy również tworzyć listę, której elementy nie są tego samego typu, na przykład:
lista1 = ["teskt1", 43, True, 40, "banan"]
W powyższym przykładzie lista zawiera elementy typu string, int oraz boolean.
Dostęp do elementów listy
Najprostszym sposobem uzyskania dostępu do elementu listy to użycie jego indeksu. Pamiętajmy przy tym, że indeksowanie zaczyna się od wartości 0.
lista_owocow = ["jablko", "banan", "gruszka"]
print(lista_owocow[0]) # jablko
print(lista_owocow[2]) # gruszka
Tekst po “#” w powyższym przykładzie to komentarz programu, w którym pokazałem wynik działania danej instruckcji. Tym sposobem będę się posługiwał w kolejnych przykładach.
Indeksować możemy również od końca. Element “-1” to element ostatni w liście, “-2” to przedostatni itd. Wykorzystując listę z poprzedniego przykładu, wydrukowanie na konsolę elementu “-1” skutkuje napisem “gruszka”, a elementu “-2” napisem “banan”, jak w poniższym przykładzie.
lista_owocow = ["jablko", "banan", "gruszka"]
print(lista_owocow[-1]) # gruszka
print(lista_owocow[-2]) # banan
Sprawdzanie rozmiaru listy
Aby znaleźć długość listy, używamy wbudowanej metody len().
print(len(lista_owocow)) # 3
Dodawanie i usuwanie elemntów do listy
Metoda append()
Dodanie elementu na koniec listy wykonujemy przy użyciu metody append().
lista_owocow = ["jablko", "banan", "gruszka"]
lista_owocow.append("wisnia")
print(lista_owocow) # ['jablko', 'banan', 'gruszka', 'wisnia']
Metoda insert()
Metoda append() działa tylko w przypadku dodawania elementów na końcu listy. W celu dodania elementów w żądanej pozycji używamy metody insert(). Metoda insert() wymaga dwóch argumentów (pozycja, wartość).
lista_owocow = ["jablko", "banan", "gruszka"]
lista_owocow.insert(2, "malina")
print(lista_owocow) # ['jablko', 'banan', 'malina', 'gruszka']
Element “malina” został wstawiony na pozycji “2”, czyli w miejscu, gdzie wcześniej znajdowała się “gruszka”.
Metoda remove()
Metoda remove() usuwa pierwszy pasujący element (który jest przekazywany jako argument) z listy.
lista_owocow = ["jablko", "banan", "gruszka"]
lista_owocow.remove("banan")
print(lista_owocow) # ['jablko', 'gruszka']
Jeśli lista zawiera więcej niż jeden pasujący element, to metoda remove() usuwa pierwszy z nich.
Metoda pop()
Metda pop() usuwa i zwraca domyślnie ostatni element listy. Aby usunąć element z określonej pozycji Listy, przekazywany jest indeks elementu jako argument metody pop().
lista_owocow = ["jablko", "banan", "gruszka"]
lista_owocow.pop()
print(lista_owocow) # ['jablko', 'banan']
lista_owocow.pop(0)
print(lista_owocow) # ['banan']
Odwracanie listy
Listę odwracamy korzystając z metody reverse():
lista_owocow = ["jablko", "banan", "gruszka"]
lista_owocow.reverse()
print(lista_owocow) # ['gruszka', 'banan', 'jablko']
Cięcie (slicing)
Wyrażenie lista[start:stop] zwraca część listy od indeksu start do indeksu stop.
lista_owocow = ['jablko', 'banan', 'malina', 'gruszka']
print(lista_owocow[1:3]) # ['banan', 'malina']
print(lista_owocow[0:2]) # ['jablko', 'banan']
W powyższym przykładzie odwołanie się do elementów “1:3” zwraca elemeny znajdujące się na pozycjach 1 i 2. Indeks stop (3) nie jest uwzględniany, co wynika ze sposobu, w jaki przechowywane są dane w pamięci komputera.
Cięcia listy możemy dokonać jeszcze na kilka sposobów:
- dostęp od początku do wybranego położenia:
[:indeks]
- dostęp od wybranego położenia do końca listy:
[indeks:]
- dostęp do co drugiego elementu listy:
[::2]
Wyrażenia listowe (list comprehension)
List comprehesion niestety nie posiada adekwatnego tłumaczenia na język polski. W niektórych artykułach możemy znaleźć termin “listy składane” lub “wyrażenia listowe”. Będę używał tego drugiego określenia, które lepiej odzwierciedla angielski termin. Wyrażenia listowe oferują krótką składnię, w sytuacjach gdy chcemy utworzyć nową listę na podstawie istniejącej listy. Rozważmy następujący przykład. Chcemy utworzyć listę owoców, wybierając z listy lista_owoców te owoce, które posiadają w nazwie literę “k”. Do tego celu musimy stworzyć pętlę for:
lista_owocow = ["jablko", "banan", "gruszka"]
nowa_lista_owocow = []
for x in lista_owocow:
if "k" in x:
nowa_lista_owocow.append(x)
print(nowa_lista_owocow) # ['jablko', 'gruszka']
Przy użyciu wyrażenia listowego, ten sam efekt możemy uzyskać znacznie prościej:
nowa_lista_owocow = [x for x in lista_owocow if "k" in x]
print(nowa_lista_owocow) # ['jablko', 'gruszka']
Aby zrozumieć powyższy przykład przyjrzyjmy się składni:
nowa_lista = [ wyrażenie(element) for element in stara_list if warunek]
List comprehension przechodzi przez wszystkie elementy listy i za każdym razem zwraca wynik wyrażenia jeśli spełniony jest określony warunek. W kontekście naszego przykładu mamy:
- wyrażenie: x
- warunek: “k” in x
Wynikiem wyrażenia “x” jest “x” czyli element starej listy.
Sortowanie listy
Metoda sort() domyślnie sortuje elementy listy.w sposób rosnący. W przypadku tekstu jest to sortowanie alfabetyczne, tak jak w poniższym przykładzie.
lista_owocow = ["jablko", "banan", "gruszka"]
lista_owocow.sort()
print(lista_owocow) # ['banan', 'gruszka', 'jablko']
Możemy także utworzyć kryteria sortowania, stosując następującą składnię:
lista.sort(reverse=True|False, key=funkcja)
Dla przykładu posortujmy listę od największego do najmniejszego elementu.
lista_owocow = ["jablko", "banan", "gruszka"]
lista_owocow.sort(reverse=True)
print(lista_owocow) # ['jablko', 'gruszka', 'banan']
W kolejnym przykładzie posortujemy listę ze względu na długość elementów. W tym celu tworzymy funkcję, która zwraca długość elementu, którą następnie wykorzystujemy jako argument metody sort().
def dlugosc(e):
return len(e)
lista_owocow = ["jablko", "banan", "gruszka"]
lista_owocow.sort(key=dlugosc)
print(lista_owocow) # ['banan', 'jablko', 'gruszka']
Inne operacje na listach
Poniżej zestawiłem inne, przykładowe metody do operacji na listach:
- extend() – Dodaje wszystkie elementy listy do innej listy
- clear() – Usuwa wszystkie elementy z listy
- index() – Zwraca indeks pierwszego dopasowanego elementu
- count() – Zwraca liczbę elementów przekazanych jako argument
- copy() – Zwraca kopię listy
Podsumowanie
Z artykułu dowiedziałeś się czym jest lista w języku Python oraz jak wykonywać podstawowe operacje na listach, takie jak:
- tworzenie
- dodawanie i usuwanie elementów
- cięcie
- odwracanie
- wyrażenia listowe
O autorze
Dr hab. inż. Szymon Skoneczny specjalizuje się w informatyce przemysłowej i symulacjach komputerowych. Współpracował z takimi uczelniami jak Politechnika Krakowska i Akademia Górniczo-Hutnicza oraz firmami, m. in. Siemens, Electricite de Fracne, ArcelorMittal.