Przejdź do głównej treści
eLearner.app
Moduł 6 · Lekcja 4 z 424/36 w kursie~12 min
Lekcje modułu (4/4)

Podstawowe itertools

Python oferuje wiele narzędzi do iteracji: niektóre są wbudowane (zawsze dostępne), inne znajdują się w module itertools biblioteki standardowej. Oto najważniejsze z nich.

enumerate: indeks + wartość

Gdy podczas pętli potrzebujesz zarówno indeksu, jak i samego elementu:

Python
for i, parola in enumerate(["a", "b", "c"]):
    print(i, parola)
# 0 a
# 1 b
# 2 c

# rozpoczęcie od innej liczby:
for i, parola in enumerate(["a", "b", "c"], start=1):
    print(i, parola)

zip: iteracja równoległa

Łączy ze sobą wiele obiektów iterowalnych element po elemencie:

Python
nomi = ["Ada", "Linus", "Grace"]
eta = [36, 54, 85]

for n, e in zip(nomi, eta):
    print(f"{n} ha {e} anni")

Funkcja zip kończy działanie na najkrótszym z obiektów. Dla dłuższego łączenia użyj itertools.zip_longest.

Tworzenie słownika z dwóch równoległych list:

Python
dict(zip(nomi, eta))
# {'Ada': 36, 'Linus': 54, 'Grace': 85}

itertools.chain: łączenie obiektów iterowalnych

Python
from itertools import chain
list(chain([1, 2], [3, 4], [5]))
# [1, 2, 3, 4, 5]

Bez tworzenia pośredniej listy: przydatne dla plików, generatorów itp.

itertools.count i repeat: nieskończone iteratory

Python
from itertools import count, repeat

# count(start, step) — nieskończone rosnące liczby całkowite
for i in count(10, 2):
    if i > 20: break
    print(i)
# 10, 12, 14, 16, 18, 20

# repeat(x, n) — powtarza tę samą wartość n razy (lub nieskończenie bez n)
list(repeat("ok", 3))   # ['ok', 'ok', 'ok']

itertools.combinations

Wszystkie kombinacje (bez powtórzeń, niezależnie od kolejności) o określonej długości:

Python
from itertools import combinations
list(combinations([1, 2, 3, 4], 2))
# [(1,2), (1,3), (1,4), (2,3), (2,4), (3,4)]

Wariant z uwzględnieniem kolejności: permutations. Warianty z powtórzeniami: combinations_with_replacement oraz product.

zip() dla słowników i niezbalansowanych obiektów iterowalnych

Funkcja zip() przerywa działanie, gdy tylko najkrótszy z obiektów iterowalnych ulegnie wyczerpaniu. Jeśli chcesz połączyć elementy i zachować nadmiarowe wartości (uzupełniając je wartością domyślną, np. None), możesz użyć funkcji zip_longest() z modułu itertools. Dodatkowo, wynik funkcji zip możesz przekazać bezpośrednio do dict(), aby natychmiast utworzyć słownik.

Spróbuj sam

Ćwiczenie#python.m6.l4.e1
Próby: 0Ładowanie...

Mając dane równoległe listy `countries = ['Italia', 'Francia', 'Spagna']` oraz `capitals = ['Roma', 'Parigi', 'Madrid']`, utwórz słownik `mapping` w formacie {country: capital}. Oceń słownik `mapping`.

Ładowanie edytora...
Pokaż wskazówkę

dict(zip(countries, capitals))

Rozwiązanie dostępne po 3 próbach

Ćwiczenie powtórzeniowe

Ćwiczenie#python.m6.l4.e2
Próby: 0Ładowanie...

Mając daną listę `words = ['ciao', 'mondo', 'python']`, utwórz listę `enumerated_items` zawierającą krotki (i, word) rozpoczynając indeksowanie od i=1. Oceń `enumerated_items`.

Ładowanie edytora...
Pokaż wskazówkę

enumerate(words, start=1) → krotki (i, wartość).

Rozwiązanie dostępne po 3 próbach

Dodatkowe wyzwanie

Ćwiczenie#python.m6.l4.e3
Próby: 0Ładowanie...

Mając dwie listy `keys = ['a', 'b', 'c']` oraz `values = [10, 20, 30]`, użyj funkcji `zip`, aby je połączyć, i przekształć wynik w słownik. Zapisz wynikowy słownik w zmiennej `my_dict` i go oceń.

Ładowanie edytora...
Pokaż wskazówkę

Użyj dict(zip(keys, values)) i przypisz wynik do my_dict.

Rozwiązanie dostępne po 3 próbach