Funkcja range() w Pythonie – podstawy i praktyczne zastosowania

Funkcja range() w Pythonie to jedno z najważniejszych narzędzi do generowania sekwencji liczb całkowitych, wykorzystywane przede wszystkim w pętlach i operacjach na liczbach. Jej elastyczność, wydajność i prostota czynią ją fundamentem pracy każdego programisty Pythona.

Czym jest range()?

range() to wbudowany typ i funkcja Pythona, która tworzy sekwencję liczb w zadanym zakresie, zgodnie z regułami matematyki dyskretnej (ciąg arytmetyczny):

  • Przyjmuje do trzech argumentów
    • stop (wymagany);
    • start (opcjonalny);
    • step (opcjonalny).

Tworzony zakres nie zawiera liczby końcowej (stop); domyślną wartością start jest 0, a step wynosi 1.

Składnia i warianty użycia

range(stop)
range(start, stop)
range(start, stop, step)

Przykłady

  • range(5) generuje: [0, 1, 2, 3, 4];
  • range(2, 7) generuje: [2, 3, 4, 5, 6];
  • range(0, 11, 2) generuje: [0, 2, 4, 6, 8, 10].

Aby uzyskać faktyczną listę liczb, konwertuj obiekt range na listę:

list(range(1, 5)) # Wynik: [1, 2, 3, 4]

Warto pamiętać, że range() nie generuje bezpośrednio listy – zwraca „leniwy” obiekt typu range, który zużywa minimalną ilość pamięci i generuje liczby „w locie” przy iteracji.

Użycie w pętlach

Range najczęściej wykorzystuje się do sterowania liczebnością i zakresem iteracji w pętlach for:

for i in range(5):
    print(i)
# Wynik: 0 1 2 3 4

Możliwość ustawienia początku, końca i kroku pozwala np. na iterowanie po co drugiej wartości lub odliczanie w dół:


# Odliczanie malejące
for i in range(10, 0, -2):
    print(i)
# 10 8 6 4 2

Dzięki temu można łatwo generować zarówno rosnące, jak i malejące sekwencje.

Właściwości typu range

  • range() w Pythonie 3 to oddzielny typ danych (nie lista!);
  • może być używany do wielomilionowych sekwencji bez zużywania dużej ilości pamięci (jest to tzw. lazy evaluation – liczby są generowane dopiero podczas użycia);
  • obsługuje szybkie sprawdzenie zawierania: if 10000 in range(0, 1000000): ...;
  • możesz sprawdzić typ, np. przez type(range(10)) (wynik: <class 'range'>).

Zakres i krok – niuanse działania

  • start – liczba początkowa, domyślnie 0;
  • stopnie jest uwzględniana w sekwencji (sekwencja kończy się na stop – 1);
  • step – domyślnie 1. Krok może być także ujemny, co umożliwia generowanie sekwencji malejących.

Przykład pustej sekwencji:

list(range(5, 2))
# Wynik: []

Aby uzyskać sekwencję malejącą, krok musi być ujemny:

list(range(10, 2, -2))
# Wynik: [10, 8, 6, 4]

Typowe zastosowania – praktyczne przykłady

  • Iteracja po indeksach list:
colors = ['red', 'green', 'blue']
for i in range(len(colors)):
    print(i, colors[i])
  • Tworzenie list (w połączeniu z list comprehensions):
kwadraty = [i*i for i in range(10)]
  • Generowanie specyficznych sekwencji:
liczby_parzyste = list(range(0, 21, 2))

Różnice między Python 2 a Python 3

W Pythonie 2 istniała również funkcja xrange(), która zwracała obiekt leniwy (tak jak range() w Pythonie 3). W Pythonie 3 range() zawsze jest obiektem leniwym; klasyczna funkcja range() z Pythona 2 generowała całą listę. Obecnie zawsze korzystaj z range() tak jak opisano powyżej.

Najczęstsze pułapki

  • Ostatnia liczba w range nie jest uwzględniana: range(0, 5) daje 0–4, nie 0–5;
  • przy kroku ujemnym start musi być większy od stop (np. range(10, 0, -1));
  • obiekt range nie obsługuje wszystkich operacji typowych dla list (np. nie można go zmieniać).

Podsumowanie praktyczne

range() to uniwersalne, ultraszybkie i wydajne narzędzie do pracy z sekwencjami liczbowymi, niezastąpione w pętlach, generowaniu indeksów i operacjach arytmetycznych na zbiorach liczb w Pythonie. Zapewnia ogromną elastyczność, a dzięki implementacji „leniwej” pozwala na obsługę bardzo dużych zakresów liczb, nie obciążając pamięci operacyjnej programu.

Dobrą praktyką jest konwertowanie obiektu range na listę tylko wtedy, gdy rzeczywiście potrzebujesz wszystkich wartości naraz (np. do wyświetlenia lub dalszego przetwarzania poza pętlą).

Dla początkujących i średniozaawansowanych programistów zrozumienie range() otwiera drzwi do pełnej kontroli nad iteracjami i przetwarzaniem danych liczbowych w Pythonie.

Programista i twórca serwisu Creative Coding, absolwent Politechniki Warszawskiej (WEiTI). Od 10+ lat łączy front‑end, grafikę generatywną i narzędzia dla twórców; opublikował 120+ projektów i artykułów, prowadził warsztaty dla 2 000+ uczestników. Pracuje z JavaScriptem, Three.js, P5.js i GLSL, bada wydajność i dokumentuje procesy, tworząc praktyczne przewodniki dla osób łączących kod z obrazem, dźwiękiem i interakcją.
Zostaw komentarz

Komentarze

Brak komentarzy. Dlaczego nie rozpoczniesz dyskusji?

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *