Menu Zamknij
Programowanie · Python

List comprehension w Pythonie – składnia i praktyczne przykłady

List comprehension to jedna z najbardziej charakterystycznych i cenionych konstrukcji języka Python. Pozwala tworzyć nowe listy w jednej, zwartej linii kodu – zamiast pisać tradycyjną pętlę for z metodą append(), możesz zapisać to samo działanie znacznie krócej i czytelniej.

Definicja
List comprehension to zwięzła składnia Pythona, która pozwala budować nową listę poprzez zastosowanie wyrażenia do każdego elementu kolekcji – opcjonalnie z filtrowaniem warunkowym – w jednej linii kodu. Odpowiada na pytanie: jak szybko i czytelnie przetworzyć dane w liście?

Tradycyjna Pętla vs. List Comprehension

Spójrzmy na przykład: chcemy stworzyć listę kwadratów liczb od 0 do 9.
❌ Tradycyjna pętla for
Python
kwadraty = []
for i in range(10):
    kwadraty.append(i ** 2)
✅ List Comprehension
Python
kwadraty = [i ** 2 for i in range(10)]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
Wynik obu operacji jest identyczny. List comprehension jest krótsze, bardziej zwięzłe i – gdy się je pozna – po prostu bardziej czytelne.

Składnia krok po kroku

Ogólna postać list comprehension wygląda następująco:
Python – składnia podstawowa
[wyrażenie for element in iterowalny_obiekt]
Z opcjonalnym warunkiem filtrującym:
Python – składnia z warunkiem
[wyrażenie for element in iterowalny_obiekt if warunek]
Składnię można czytać w tej kolejności: najpierw wyrażenie wynikowe, potem pętla i ewentualny warunek:
1
wyrażenie Co zrobić z elementem – np. pomnożyć, zamienić na wielkie litery, obliczyć wartość.
2
for element in kolekcja Iteruj po każdym elemencie wskazanej kolekcji (lista, zakres, string itd.).
3
if warunek (opcjonalnie) Uwzględnij tylko elementy spełniające podany warunek – reszta jest pomijana.

Praktyczne Przykłady

Filtrowanie – tylko liczby parzyste

Python
parzyste = [i for i in range(20) if i % 2 == 0]
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

Zamiana tekstu na wielkie litery

Python
imiona = ["anna", "tomek", "kasia"]
wielkie = [imie.upper() for imie in imiona]
[‘ANNA’, ‘TOMEK’, ‘KASIA’]

Filtrowanie długich słów (ponad 4 znaki)

Python
slowa = ["pies", "kot", "komputer", "dom", "python"]
dlugie = [s for s in slowa if len(s) > 4]
[‘komputer’, ‘python’]

Przeliczenie temperatur z Celsjusza na Fahrenheita

Python
celsjusze = [0, 10, 20, 30, 37, 100]
fahrenheity = [c * 9/5 + 32 for c in celsjusze]
[32.0, 50.0, 68.0, 86.0, 98.6, 212.0]

Zagnieżdżone List Comprehension

Możemy użyć list comprehension wewnątrz innego list comprehension. Przydaje się to na przykład do spłaszczania macierzy (listy list):
Python
macierz = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
splaszczona = [el for wiersz in macierz for el in wiersz]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
⚠️ Uwaga na czytelność! Zagnieżdżone list comprehension mogą szybko stać się trudne do odczytania. Przy wielopoziomowej, trudnej do śledzenia logice rozważ tradycyjną pętlę for. Czytelność kodu jest ważniejsza niż jego zwięzłość.

Dict Comprehension i Set Comprehension

Ta sama idea działa również dla słowników i zbiorów – wystarczy zmienić nawiasy.

Dict comprehension – słownik liczba → jej kwadrat

Python
kwadraty = {i: i**2 for i in range(6)}
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

Set comprehension – zbiór unikalnych długości słów

Python
slowa = ["ala", "ma", "kota", "psa"]
dlugosci = {len(s) for s in slowa}
Przykładowy wynik: {2, 3, 4} (kolejność może się różnić)
Różnica w nawiasach: [ ] = lista, { klucz: wartość } = słownik, { wartość } = zbiór, ( ) = generator (nie tworzy listy od razu – oszczędza pamięć).

Kiedy Używać, a Kiedy Nie?

Sytuacja Rekomendacja Dlaczego?
Prosta transformacja listy ✅ List comprehension Krótko, czytelnie, pythonowo
Filtrowanie z jednym warunkiem ✅ List comprehension Jeden wiersz zamiast trzech
Skomplikowana logika wielowarunkowa ⚠️ Tradycyjna pętla Czytelność ważniejsza niż zwięzłość
Zagnieżdżenie 3+ poziomów ⚠️ Tradycyjna pętla LC staje się nieczytelne
Duże dane, zależy nam na pamięci 💡 Generator expression Elementy generowane jeden po drugim

Generator expression – oszczędność pamięci

Jeśli pracujesz z milionami elementów, użyj nawiasów okrągłych zamiast kwadratowych – zamiast tworzyć całą listę w pamięci, Python będzie generować elementy jeden po drugim:
Python – generator expression
kwadraty = (i ** 2 for i in range(1_000_000)) # nawiasy okrągłe!

List Comprehension a Inne Techniki

Technika Składnia Zwraca Kiedy używać?
List comprehension [x for x in ...] lista Standardowe przetwarzanie list
Dict comprehension {k: v for ...} słownik Budowanie słowników dynamicznie
Set comprehension {x for x in ...} zbiór (unikalne) Usuwanie duplikatów
Generator expression (x for x in ...) generator Duże dane, oszczędność pamięci
Pętla for + append klasyczna pętla lista Złożona logika, wiele kroków

Podsumowanie – co warto zapamiętać

  • List comprehension tworzy nową listę w jednej linii kodu – zamiast pętli for z append()
  • Składnia: [wyrażenie for element in kolekcja if warunek] – warunek jest opcjonalny
  • Czytaj od lewej do prawej: „weź wyrażenie, dla każdego elementu z kolekcji, jeśli warunek”
  • Ta sama idea działa dla słowników (dict comprehension) i zbiorów (set comprehension)
  • Przy dużych danych użyj generator expression z nawiasami okrągłymi – oszczędza pamięć
  • Gdy logika staje się skomplikowana – wróć do tradycyjnej pętli. Czytelność > zwięzłość

Przeczytaj również

Ładowanie artykułów…

10h | C++ Kurs Podstawowy Programowania | Postaw Na Rozwój

X