Indeks, wartość i enumerate()
for potrafi iterować nie tylko przez liczby, ale także licznik i akumulator, co pozwala przekształcić proste wyszukiwanie w prawdziwe narzędzie analizy danych.
for potrafi przechodzić nie tylko przez liczby
łańcuch znaków — to sekwencja znaków (rozdział 8), a więc, for
potrafi iterować i jej — znak po znaku, bez indeksów:
for letter in "Python":
print(letter)
To samo dotyczy list i innych iterowalne obiektów —
tak nazywa się wszystko, co for potrafi przechodzić przez jeden żywioł na raz.
Struna, lista, Zakres range() wszystkie są obiektami iteracyjnymi;
Dokładny mechanizm techniczny, jak dokładnie Python to robi „pod maską”
Indeks vs Wartość
W pętli for letter in "Python": dostajemy sam symbol
("wartość"), ale nie numer konta ("indeks"). Czasami liczba jest ważna, na przykład dla
wyjść "symbol No1: P".
Klasyczną opcją jest cykl indeksowy
slovo = "Python"
for i in range(len(slovo)):
print(i, slovo[i])
„Pythoniczna” wersja — enumerate()
slovo = "Python"
for i, letter in enumerate(slovo):
print(i, letter)
| i | letter |
|---|---|
| 0 | P |
| 1 | y |
| 2 | t |
| 3 | h |
| 4 | o |
| 5 | n |
enumerate() jest potrzebne dokładnie wtedy, gdy zarówno indeks, jak i wartość są ważne jednocześnie. Jeśli w ogóle nie potrzebujesz indeksu, użyj for letter in slovo:, bez niej. Pętla indeksowa (range(len(...))) nie jest „złym” enumerate() poradzi sobie krócej.Licznik to zmienna, który się liczy
Licznik to zmienna, który rośnie z każdą iteracją (lub zmniejsza się) o stały krok, zwykle 1. Śledzi „ile razy już jesteśmy załatwione.”
glasnye = „aeeyoueyyuya”
slovo = „programowanie”
kolichestvo = 0
for letter in slovo:
if letter in glasnye:
kolichestvo += 1
print(kolichestvo)
| Symbol | letter in glasnye? | kolichestvo po kroku |
|---|---|---|
| p | nie | 0 |
| r | nie | 0 |
| o | Tak | 1 |
| g | nie | 1 |
| r | nie | 1 |
| a | Tak | 2 |
| … | … | … |
Urządzenie pamięci masowej (akumulator) to zmienna, która gromadzi wynik
Przechowywanie jest zaprojektowany jak licznik, ale nie sumuje liczby kroków, lecz Sam wynik to suma, iloczyn, klejony sznurek:
chisla = [4, 8, 15, 16, 23, 42]
summa = 0
for n in chisla:
summa += n
print(summa)
| Iteracja | n | summa po kroku |
|---|---|---|
| 1 | 4 | 4 |
| 2 | 8 | 12 |
| 3 | 15 | 27 |
| 4 | 16 | 43 |
| 5 | 23 | 66 |
| 6 | 42 | 108 |
kolichestvo = 0) — bez tego kroku kolichestvo += 1 zawiesza się już w pierwszej iteracji, ponieważ zmienna jeszcze nie istnieje.Mini-Projekt Analizatora Tekstu
Złóżmy licznik i urządzenie do przechowywania w jednym małym narzędziu – liczmy samogłoski, długość najdłuższego słowa oraz łączna liczba słów w tekście:
tekst = „python to proste i proste”
slova = tekst.split()
glasnye_count = 0
for letter in tekst:
if letter in „aeeyoueyyuya”:
glasnye_count += 1
samoe_dlinnoe = ""
for slovo in slova:
if len(slovo) > len(samoe_dlinnoe):
samoe_dlinnoe = slovo
print(f"słowa: {len(slova)}, samogłoski: {glasnye_count}, najdłuższy: {samoe_dlinnoe}")
glasnye_count oraz samoe_dlinnoe — dwa różne akumulatory, każdy ze swoim cyklem i własną inicjalizacją początkową. Łączenie wielu stanów w jednym programie to normalna rzecz, najważniejsze, żeby nie pomylić, który stan zmienia się w której pętli.