6.1 Pętla for
W Pythonie pętle po elementach listy często realizowane są za pomocą pętli for
. To jedno z najczęściej używanych podejść do iteracji po liście, pozwalające wykonać blok kodu dla każdego elementu na liście.
Podstawy pętli for
Pętla for
w Pythonie przechodzi po każdym elemencie listy, tymczasowo przypisując wartość bieżącego elementu zmiennej podanej po słowie kluczowym for
. Przykład:
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
print(fruit)
Przejście przez listę w odwrotnej kolejności można zrealizować za pomocą cięć:
fruits = ["apple", "banana", "cherry"]
for fruit in fruits[::-1]:
print(fruit)
6.2 Pętla for
z indeksami
Oprócz przechodzenia przez listę za pomocą klasycznego for
, można przejść przez listę używając pętli for
w połączeniu z funkcją range()
. To pozwala pracować nie tylko z samymi elementami, ale także z ich pozycjami, co bywa konieczne przy wykonywaniu bardziej skomplikowanych manipulacji danymi.
Podstawy iteracji indeksowanej
Do iteracji po liście z dostępem do indeksu każdego elementu można użyć następującego podejścia:
my_list = ['a', 'b', 'c', 'd']
for i in range(len(my_list)):
print(f'Index: {i}, Element: {my_list[i]}')
Zalety używania indeksów
Użycie indeksów w pętlach pozwala nie tylko uzyskać dostęp do każdego elementu, ale także zmieniać elementy listy na miejscu. To szczególnie przydatne, gdy trzeba modyfikować listę podczas iteracji.
Przykład:
my_list = ['a', 'b', 'c', 'd']
for i in range(len(my_list)):
my_list[i] = my_list[i] * 2
Przykłady skomplikowanych manipulacji
Z indeksami łatwo realizować algorytmy, które wymagają równoczesnego dostępu do kilku elementów listy, na przykład do porównania bieżącego elementu z poprzednim lub następnym:
Przykład:
my_list = [3, 5, 2, 9, 4]
for i in range(1, len(my_list)):
if my_list[i] > my_list[i - 1]:
print(f'{my_list[i]} jest większy niż {my_list[i - 1]}')
6.3 Wykorzystanie funkcji enumerate()
W Pythonie funkcja enumerate()
zapewnia wygodny sposób iteracji po elementach listy z jednoczesnym dostępem do ich indeksów. To szczególnie przydatne, gdy konieczne jest przetwarzanie zarówno indeksu, jak i wartości elementu listy w ramach pętli.
Podstawy funkcji enumerate()
Funkcja enumerate()
opakowuje listę w specjalny obiekt i zwraca iterator, który produkuje krotki (pary wartości), składające się z indeksu i wartości elementu:
my_list = ["apple", "banana", "cherry"]
for index, element in enumerate(my_list):
print(f'Index: {index}, Element: {element}')
Teraz masz nie tylko element, ale i jego indeks.
Zalety enumerate()
Użycie enumerate()
sprawia, że kod jest bardziej czytelny i pozwala uniknąć konieczności ręcznego zarządzania indeksami za pomocą range(len(...))
. To upraszcza manipulacje elementami listy, takie jak zmiana, dostęp do elementów i wykonywanie kontrolnych sprawdzeń.
Przykłady użycia
enumerate()
idealnie nadaje się do zadań, gdzie wymagana jest jednoczesna zmiana elementów listy lub porównywanie elementów z ich indeksami:
my_list = ["apple", "banana", "cherry"]
for index, element in enumerate(my_list):
if index % 2 == 0:
print(f'Element {element} na parzystym indeksie {index}')
6.4 Pętla while
Omówiliśmy for
, a teraz porozmawiajmy o pętli while
. Ta pętla również może być przydatna przy pracy z elementami listy.
Przypominam, że pętla while
zaczyna swoją pracę od sprawdzenia warunku. Jeśli warunek jest prawdziwy, wykonywane jest ciało pętli, a następnie warunek jest sprawdzany ponownie. Proces powtarza się do momentu, aż warunek stanie się fałszywy.
Przykład iteracji po liście
Powiedzmy, że masz listę liczb i chcesz iterować przez nią, dopóki nie napotkasz określonej wartości:
numbers = [1, 2, 3, 4, 5, -1, 6]
i = 0
while i < len(numbers) and numbers[i] != -1:
print(numbers[i])
i += 1
Nie różni się to wiele od pętli for
, prawda? Ale są przypadki, gdzie nie trzeba używać indeksu, aby pracować z elementami listy. Na przykład w liście przechowywane są pewne zadania, muszą one być podejmowane po jednym z listy, wykonywane i usuwane z listy.
Ten kod schematycznie można by zapisać tak:
tasks = [1, 2, 3, 4, 5, -1, 6]
while len(tasks) > 0:
task = tasks.pop()
print(task)
GO TO FULL VERSION