1. Czym jest lista w Pythonie?
Lista to uporządkowana sekwencja elementów zapisana w nawiasach kwadratowych [], gdzie elementy oddzielone są przecinkami. Lista zachowuje kolejność, jest modyfikowalna i może przechowywać różne typy danych.
- 1. Czym jest lista w Pythonie?
- 2. Tworzenie list – podstawy
- 3. Indeksy i odwoływanie się do elementów
- 4. Dodawanie elementów do listy – wszystkie najważniejsze metody
- 5. Usuwanie elementów z listy
- 6. Zmiana elementów listy
- 7. Slicing – praca na fragmentach listy
- 8. Sortowanie i odwracanie list
- 9. Iteracja po liście – for, enumerate, list comprehensions
- 10. Częste błędy i pułapki przy pracy na listach
- 11. Przykładowe mini‑projekty – listy w zastosowaniach „internetowych”
- 12. Podsumowanie – najważniejsze „ściągawki” do pracy na listach
Przykłady użycia list w kilku wariantach:
pusta_lista = [] # pusta lista
liczby = [1, 2, 3, 4] # lista liczb całkowitych
napisy = ["www", "http", "python"] # lista napisów (łańcuchów znaków)
mieszana = [1, "tekst", 3.14, True] # lista mieszanych typów
Najważniejsze cechy listy:
- uporządkowana – elementy mają konkretną kolejność i indeksy;
- modyfikowalna (mutable) – można zmieniać jej zawartość w miejscu;
- dowolne typy – może przechowywać różne typy danych, w tym inne listy.
2. Tworzenie list – podstawy
2.1. Tworzenie „z palca”
Najprostszy sposób to wpisanie elementów w nawiasach kwadratowych. Oto krótki przykład:
domeny = ["google.com", "example.com", "python.org"]
porty = [80, 443, 8080]
2.2. Tworzenie pustej listy i stopniowe dodawanie
Możesz zacząć od pustej listy i rozszerzać ją metodą append():
adresy_ip = [] # pusta lista
adresy_ip.append("8.8.8.8")
adresy_ip.append("1.1.1.1")
2.3. Tworzenie listy z innej kolekcji
Możesz zamienić inne iterowalne obiekty na listę, np. ciąg znaków na listę znaków:
tekst = "python"
lista_znakow = list(tekst) # ['p', 'y', 't', 'h', 'o', 'n']
3. Indeksy i odwoływanie się do elementów
Elementy listy mają indeksy — numery pozycji zaczynające się od 0. Dla poniższej listy:
domeny = ["google.com", "example.com", "python.org"]
Wybrane odwołania do elementów wyglądają tak:
domeny[0]→"google.com",domeny[1]→"example.com",domeny[2]→"python.org".
Możesz też korzystać z indeksów ujemnych, czyli liczyć od końca: domeny[-1] zwróci ostatni element ("python.org"), a domeny[-2] — przedostatni ("example.com").
4. Dodawanie elementów do listy – wszystkie najważniejsze metody
Python oferuje kilka wygodnych narzędzi do dodawania elementów do list:
4.1. append() – dodawanie na koniec listy
Metoda append() dodaje jeden element na końcu listy. Przykład działania:
domeny = ["google.com", "example.com"]
domeny.append("python.org")
print(domeny) # ['google.com', 'example.com', 'python.org']
append() przyjmuje dokładnie jeden argument (może to być liczba, napis, inna lista czy obiekt) i modyfikuje listę w miejscu (zwraca None).
Dodanie listy jako pojedynczego elementu wygląda tak:
lista = [1, 2, 3]
lista.append([4, 5])
print(lista) # [1, 2, 3, [4, 5]] ← zagnieżdżona lista jako pojedynczy element
4.2. extend() – dodawanie wielu elementów naraz
Metoda extend() rozszerza listę o wszystkie elementy z innego iterowalnego obiektu. Oto przykład:
domeny = ["google.com"]
nowe = ["example.com", "python.org"]
domeny.extend(nowe)
print(domeny) # ['google.com', 'example.com', 'python.org']
Różnicę między append() a extend() dobrze ilustrują te fragmenty:
domeny = ["google.com"]
nowe = ["example.com", "python.org"]
domeny_append = domeny.copy()
domeny_append.append(nowe) # ['google.com', ['example.com', 'python.org']]
domeny_extend = domeny.copy()
domeny_extend.extend(nowe) # ['google.com', 'example.com', 'python.org']
extend() działa też z innymi iterowalnymi obiektami, np. ze stringiem:
litery = ["a"]
litery.extend("bc")
print(litery) # ['a', 'b', 'c']
4.3. insert() – wstawianie na konkretną pozycję
Metoda insert(index, value) wstawia element przed wskazany indeks. Krótki przykład:
domeny = ["google.com", "python.org"]
domeny.insert(1, "example.com")
print(domeny) # ['google.com', 'example.com', 'python.org']
Warto pamiętać o trzech praktycznych wariantach:
insert(0, x)– wstawia na początek listy;insert(len(lista), x)– odpowiednikappend(x);- zbyt duży indeks – element trafi na koniec listy.
4.4. Operator + – łączenie list w nową listę
Za pomocą operatora + łączysz dwie listy, tworząc nową listę. Oto przykład:
http = [80, 8080]
bezpieczne = [443]
porty = http + bezpieczne
print(porty) # [80, 8080, 443]
Operator + nie modyfikuje istniejących list; zwraca nową listę z elementami obu operandów.
4.5. Operator * – powielanie listy
Operator * zwielokrotnia listę — powtarza jej elementy określoną liczbę razy. Przykład:
statusy = ["OK"] * 3
print(statusy) # ['OK', 'OK', 'OK']
To przydatne np. do inicjowania list o określonej długości:
bufor = [0] * 10 # „pusta” tablica buforowa z 10 zer
Dla szybkiego porównania najpopularniejszych metod dodawania elementów do listy zobacz poniższą tabelę:
| Metoda/operator | Działa w miejscu | Argument | Efekt | Przykład |
|---|---|---|---|---|
| append(x) | Tak | pojedynczy element | dodaje element na koniec | lista.append(5) |
| extend(iterable) | Tak | iterowalny obiekt | dodaje każdy element z iterable | lista.extend([4,5]) |
| insert(i, x) | Tak | indeks i element | wstawia przed indeksem i | lista.insert(0, "a") |
| + | Nie | dwie listy | zwraca nową, połączoną listę | nowa = a + b |
| * | Nie | lista i liczba | zwraca nową listę z powtórzeniami | trzy = a * 3 |
5. Usuwanie elementów z listy
Umiejętność dodawania warto uzupełnić o usuwanie — Python oferuje tu kilka wygodnych mechanizmów.
5.1. pop() – usuń element po indeksie i go zwróć
pop(index) usuwa element na danej pozycji i zwraca go. Gdy indeksu nie podasz, usuwa ostatni element:
domeny = ["google.com", "example.com", "python.org"]
ostatnia = domeny.pop() # domyślnie usuwa ostatni element
print(ostatnia) # 'python.org'
print(domeny) # ['google.com', 'example.com']
pierwsza = domeny.pop(0) # usuwa element o indeksie 0
print(pierwsza) # 'google.com'
print(domeny) # ['example.com']
Jeśli indeks jest błędny, Python zgłosi IndexError.
5.2. remove() – usuń element po wartości
remove(value) usuwa pierwsze wystąpienie podanej wartości:
statusy = ["OK", "ERROR", "OK"]
statusy.remove("OK")
print(statusy) # ['ERROR', 'OK'] ← usunięto tylko pierwsze "OK"
Jeśli element nie istnieje, zgłaszany jest ValueError.
5.3. Instrukcja del – usuwanie elementu lub fragmentu
Instrukcja del usuwa element lub wycinek listy — to działa bardzo szybko i bez zwracania wartości:
domeny = ["google.com", "example.com", "python.org"]
del domeny[1] # usuń element o indeksie 1
print(domeny) # ['google.com', 'python.org']
del domeny[:] # usuń wszystkie elementy (lista pozostaje, ale pusta)
print(domeny) # []
domeny = ["google.com", "example.com", "python.org", "test.com"]
del domeny[1:3] # usuń zakres (indeksy 1 i 2)
print(domeny) # ['google.com', 'test.com']
Porównanie metod usuwania elementów z listy znajdziesz w tej tabeli:
| Metoda | Działa w miejscu | Wejście | Zwraca | Opis |
|---|---|---|---|---|
| pop([i]) | Tak | indeks (opcjonalny) | usunięty element | usuwa element (ostatni, jeśli brak indeksu) |
| remove(x) | Tak | wartość | brak | usuwa pierwsze wystąpienie wartości x |
| del lista[i:j] | Tak | indeks lub wycinek | brak | usuwa element lub zakres elementów |
| clear() | Tak | — | brak | usuwa wszystkie elementy z listy |
6. Zmiana elementów listy
Ponieważ lista jest modyfikowalna, można zmienić element poprzez przypisanie pod indeksem. Oto prosty przykład:
domeny = ["google.com", "example.com"]
domeny[1] = "docs.python.org"
print(domeny) # ['google.com', 'docs.python.org']
Możesz też modyfikować fragment listy (tzw. slice assignment):
liczby = [1, 2, 3, 4, 5]
liczby[1:4] = [20, 30] # wstawiamy krótszą listę w miejsce dłuższego fragmentu
print(liczby) # [1, 20, 30, 5]
Zastąpienie całej listy nową zawartością działa tak:
liczby[:] = [10, 20, 30]
7. Slicing – praca na fragmentach listy
Slicing to wycinanie fragmentów listy poprzez zapis lista[a:b:c], gdzie a to start, b to koniec (bez b), a c to krok:
liczby = [1, 2, 3, 4, 5]
Najczęściej używane warianty cięcia listy:
liczby[:3]→ pierwsze trzy elementy:[1, 2, 3],liczby[2:]→ od trzeciego do końca:[3, 4, 5],liczby[-2:]→ dwa ostatnie:[4, 5],liczby[:-1]→ wszystko oprócz ostatniego:[1, 2, 3, 4],liczby[::2]→ co drugi element:[1, 3, 5],liczby[::-1]→ odwrócona lista:[5, 4, 3, 2, 1].
Slicing świetnie sprawdza się np. przy pracy z logami lub danymi z API, gdy trzeba szybko pobrać wycinek rekordów.
8. Sortowanie i odwracanie list
8.1. reverse() – odwracanie kolejności
Metoda reverse() odwraca kolejność elementów listy w miejscu (bez tworzenia nowej listy):
domeny = ["a.com", "b.com", "c.com"]
domeny.reverse()
print(domeny) # ['c.com', 'b.com', 'a.com']
To odpowiednik domeny[::-1], ale bez alokowania nowej listy.
8.2. sort() – sortowanie listy
Metoda sort() układa elementy listy w kolejności rosnącej (liczby) lub alfabetycznej (napisy):
liczby = [5, 2, 9, 1]
liczby.sort()
print(liczby) # [1, 2, 5, 9]
domeny = ["python.org", "example.com", "google.com"]
domeny.sort()
print(domeny) # ['example.com', 'google.com', 'python.org']
Kluczowe parametry sort() to: reverse=True (sortowanie malejące) oraz key=... (sortowanie po kluczu, np. po długości domeny). Przykłady:
liczby.sort(reverse=True)
domeny.sort(key=len)
sort() modyfikuje listę w miejscu i zwraca None.
9. Iteracja po liście – for, enumerate, list comprehensions
9.1. Pętla for po elementach
Najprostsza pętla po wszystkich elementach listy wygląda tak:
domeny = ["google.com", "example.com", "python.org"]
for domena in domeny:
print(domena)
9.2. Iteracja z numerem indeksu – enumerate()
Jeśli potrzebujesz jednocześnie indeksu i wartości, użyj enumerate():
for i, domena in enumerate(domeny):
print(i, domena)
9.3. List comprehensions – tworzenie list w „jednej linijce”
Wyrażenia listowe tworzą nowe listy na podstawie istniejących danych według wzoru:
nowa_lista = [wyrażenie for element in stara_lista if warunek]
Praktyczne przykłady filtracji i transformacji:
domeny = ["google.com", "example.com", "test.org"]
# lista długości domen
dlugosci = [len(d) for d in domeny]
# filtrowanie domen .com
comy = [d for d in domeny if d.endswith(".com")]
Wyrażenia listowe to wygodny i czytelny sposób budowy nowych list, z opcjonalnymi warunkami if.
10. Częste błędy i pułapki przy pracy na listach
10.1. append() vs extend()
append() dodaje jeden element (nawet jeśli jest listą), podczas gdy extend() rozpakowuje i dodaje wszystkie elementy iterowalnego obiektu. Przykłady różnic:
a = [1, 2]
b = [3, 4]
a.append(b) # [1, 2, [3, 4]] ← często nie o to chodzi
a = [1, 2]
b = [3, 4]
a.extend(b) # [1, 2, 3, 4]
10.2. Modyfikacja listy w trakcie iteracji
Nie modyfikuj tej samej listy, po której właśnie iterujesz — może to prowadzić do pominięcia elementów lub nieprzewidywalnych efektów. Bezpieczniej jest iterować po kopii listy:
for elem in lista[:]:
...
Alternatywnie zbuduj nową listę i przypisz ją na końcu zamiast edytować oryginał w locie.
11. Przykładowe mini‑projekty – listy w zastosowaniach „internetowych”
11.1. Proste filtrowanie domen HTTP/HTTPS
Prosty podział adresów na protokoły HTTPS i HTTP wygląda następująco:
adresy = [
"http://example.com",
"https://secure.com",
"https://python.org",
"http://test.pl",
]
https_only = [url for url in adresy if url.startswith("https://")]
http_only = [url for url in adresy if url.startswith("http://")]
print("HTTPS:", https_only)
print("HTTP:", http_only)
11.2. Zliczanie portów > 1024
Rozdzielenie portów uprzywilejowanych od nieuprzywilejowanych możesz zrobić tak:
porty = [21, 22, 80, 443, 8080, 3306]
porty_uprzywilejowane = [p for p in porty if p <= 1024] porty_nieuprzywilejowane = [p for p in porty if p > 1024]
print("<= 1024:", porty_uprzywilejowane)
print("> 1024:", porty_nieuprzywilejowane)
12. Podsumowanie – najważniejsze „ściągawki” do pracy na listach
Tworzenie i podstawy:
lista = [1, 2, 3] # tworzenie listy
lista = [] # pusta lista
Dodawanie elementów:
lista.append(x) # dodaj x na koniec
lista.extend(iterable) # dodaj wszystkie elementy z iterable
lista.insert(i, x) # wstaw x przed indeks i
nowa = lista1 + lista2 # połącz dwie listy w nową
powielona = lista * 3 # powtórz listę 3 razy
Usuwanie elementów:
lista.pop() # usuń i zwróć ostatni element
lista.pop(i) # usuń i zwróć element o indeksie i
lista.remove(x) # usuń pierwsze x (po wartości)
del lista[i] # usuń element o indeksie i
del lista[a:b] # usuń zakres
lista.clear() # usuń wszystkie elementy
Slicing i zmiana elementów:
lista[i] = x # podmień element
fragment = lista[a:b] # wycinek (od a do b-1)
lista[a:b] = [1, 2] # podmień fragment
odwrotna = lista[::-1] # odwrócona lista (nowa)
Sortowanie i odwracanie:
lista.reverse() # odwróć kolejność (in-place)
lista.sort() # sortuj rosnąco (in-place)
lista.sort(reverse=True) # sortuj malejąco
lista.sort(key=lambda x: len(str(x))) # sortuj po kluczu
Iteracja:
for elem in lista:
...
for i, elem in enumerate(lista):
...
List comprehensions:
nowa = [x * 2 for x in lista if x > 0]








