Iterowanie z indeksem i równoległe pętle — range, enumerate, zip

Preview Mode

You're viewing this material in preview mode. Sign up to track your progress and access all features.

Iterowanie z indeksem i równoległe pętle — range, enumerate, zip
In Progress

Iterowanie po listach w Pythonie — range, enumerate, zip

Tu rozwinę i wyjaśnię dokładniej, jak można przechodzić po elementach listy w Pythonie, gdy jednocześnie potrzebujesz indeksów albo chcesz łączyć dwie listy. Materiał ten rozszerza lekcję o iterowaniu z indeksem i równoległych pętlach oraz zawiera wskazówki dotyczące pętli i podstaw pętli w Pythonie.

Co warto zapamiętać (szybkie przypomnienie)

  • range(start, stop, step) — tworzy sekwencję liczb, gdzie start jest włączający, a stop jest wyłączający (nie jest zawarty). Parametr step to krok między liczbami.
  • enumerate(lista, start=0) — zwraca pary (index, wartość). Możesz ustawić od którego indeksu liczyć przez start.
  • zip(a, b, ...) — łączy elementy z kilku list w pary (lub krotki). Iteracja odbywa się do długości najkrótszej z list.

Szczegółowe wyjaśnienie i krótkie przykłady

1) range(start, stop, step)

Jak działa:

  • Jeśli podasz tylko jeden argument, to będzie to stop i sekwencja zacznie się od 0: range(5) → 0, 1, 2, 3, 4.
  • Jeśli podasz start i stop, liczby będą od start do stop - 1: range(1, 5) → 1, 2, 3, 4.
  • Argument step pozwala ustawić skok między elementami: range(0, 10, 3) → 0, 3, 6, 9.

Krótki przykład (pokazuję tylko strukturę, nie rozwiązanie zadania domowego):

for i in range(0, 10, 3):
    print(i) # wypisze: 0, 3, 6, 9

Uwaga praktyczna: gdy chcesz wypisać liczby parzyste w pewnym przedziale, użyj odpowiedniego start i step. Pamiętaj, że wartość stop nie zostanie wydrukowana, jeśli jest równa tej granicy (zakres jest wyłączający).

2) enumerate(lista, start=0)

Gdy potrzebujesz numerów porządkowych przy przechodzeniu po elementach listy, zamiast robić liczniki ręcznie, użyj enumerate.

Przykład (liczmy od 1, żeby numeracja była bardziej przyjazna dla człowieka):

imiona = ["Ania", "Bartek", "Celina"]
for i, name in enumerate(imiona, start=1):
    print(i, name) # Wynik:
    # 1 Ania
    # 2 Bartek
    # 3 Celina

Krok po kroku:

  1. enumerate(imiona) tworzy iterator, który w każdej iteracji daje krotkę (index, wartość).
  2. W pętli przypisujemy te dwie wartości do zmiennych i i name.
  3. Dzięki start=1 indeksacja rozpoczyna się od 1 zamiast od 0.

3) zip(a, b, ...)

zip łączy elementy z kilku sekwencji „po kolei” i zwraca iterator z krotkami. Jeśli listy mają różne długości, zip zakończy się na długości najkrótszej listy.

Przykład:

imiona = ["Ania", "Bartek", "Celina"]
punkty = [85, 92, 78]
for name, score in zip(imiona, punkty):
    print(name, "ma", score, "punktów") # Wynik:
    # Ania ma 85 punktów
    # Bartek ma 92 punktów
    # Celina ma 78 punktów

Wskazówka: jeśli chcesz sprawdzić, co dokładnie zwróci zip, możesz skonwertować jego wynik na listę: list(zip(a, b)) — wtedy zobaczysz wszystkie pary od razu.

Łączenie enumerate i zip

Możesz razem użyć enumerate i zip, np. gdy chcesz numerować pary elementów:

for idx, (name, score) in enumerate(zip(imiona, punkty), start=1):
    print(idx, name, score)

Uwaga o bezpieczeństwie danych i sytuacjach specjalnych

  • Jeśli listy różnią się długością i chcesz uwzględnić wszystkie elementy, rozważ użycie itertools.zip_longest (import z modułu itertools), który wypełnia brakujące wartości wartością domyślną.
  • Jeżeli używasz indeksów ręcznie (np. for i in range(len(lista))), pamiętaj o IndexError — sprawdzaj długości list, gdy operujesz równolegle na kilku listach.

Ćwiczenie (zadanie do samodzielnego rozwiązania)

  1. Użyj range, aby wypisać liczby parzyste od 2 do 10 (włącznie). Podpowiedź: dostosuj start, stop i step; pamiętaj, że stop nie jest zawarty w zakresie.
  2. Stwórz dwie listy (np. lista produktów i lista cen) i wypisz każdą parę produkt — cena w czytelnej formie. Podpowiedź: użyj zip. Jeśli listy mają różną liczbę elementów, pomyśl, czy chcesz pominąć nadmiarowe elementy, czy raczej je wypełnić (np. zerem lub napisem "brak").

Jeśli utkniesz, spróbuj najpierw wypisać wynik list(range(...)) lub list(zip(...)), żeby zobaczyć, co dokładnie otrzymujesz — to pomaga zrozumieć, co robi Twój kod.

Ta rozszerzona lekcja bazuje na materiałach dotyczących iterowania z indeksem oraz używania range, enumerate i zip w pętlach oraz na szerszym omówieniu pętli w Pythonie.