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.
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.
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:
Z opcjonalnym warunkiem filtrującym:
Składnię tę rozumiemy czytając od lewej do prawej jak zdanie:
Praktyczne Przykłady
Filtrowanie – tylko liczby parzyste
Zamiana tekstu na wielkie litery
Filtrowanie długich słów (ponad 4 znaki)
Przeliczenie temperatur z Celsjusza na Fahrenheita
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):
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
Set comprehension – zbiór unikalnych długości słów
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:
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ść