Menu Zamknij
List Comprehension w Pythonie – elegancki sposób na listy – KemSoft

List Comprehension w Pythonie – elegancki sposób na listy

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ę tę rozumiemy czytając od lewej do prawej jak zdanie:

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. Jeśli potrzebujesz więcej niż dwóch poziomów zagnieżdżenia – wróć do tradycyjnej pętli 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}
{2, 3, 4}
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ść

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

X