Python lista – jak dodawać elementy i pracować na listach

Oskar Gajzler
Przez
Oskar Gajzler
Redaktor IINTE.edu.pl, na co dzień zajmuje się technologiami internetowymi i tłumaczeniem skomplikowanych tematów na prosty język. Pisze poradniki o tym, jak załatwiać sprawy przez internet, jak...
14 min czytania

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.

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) – odpowiednik append(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]

Udostępnij ten artykuł
Obserwuj
Redaktor IINTE.edu.pl, na co dzień zajmuje się technologiami internetowymi i tłumaczeniem skomplikowanych tematów na prosty język. Pisze poradniki o tym, jak załatwiać sprawy przez internet, jak bezpiecznie korzystać z sieci i jak dobierać sprzęt oraz oprogramowanie. Prywatnie tropi nowinki technologiczne i testuje je, zanim opisze.
Brak komentarzy

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Wymagane pola są oznaczone *