О чём этот раздел
Теория повторяет материал исходного занятия Summary Session 5: итерируемые объекты, циклы, range() и списки. Каждая тема сопровождается рабочим примером.
Итерируемые объекты
Итерируемый объект — это объект, который может состоять из множества элементов и предоставляет их по одному, когда это необходимо. Примеры: строки, списки, объекты range, кортежи, множества и словари.
text = "Python"
for letter in text:
print(letter)
Итерация — это один шаг в процессе последовательного перебора элементов. На каждой итерации переменная цикла получает следующий элемент.
Цикл for
Цикл for позволяет повторно выполнять блок кода для каждого элемента последовательности.
text = "Python"
for letter in text:
print(letter)
Здесь letter — переменная цикла, а text — итерируемая последовательность. Цикл завершится сам, как только будут перебраны все символы.
Функция range()
range(start, stop, step) создаёт последовательность чисел:
stop— обязательный конец диапазона (не включается);start— необязательное начало (по умолчанию0);step— необязательный шаг (по умолчанию1).
# Один аргумент: от 0 до 5 не включительно
for i in range(5):
print(i)
# Два аргумента: от 2 до 6 не включительно
for i in range(2, 6):
print(i)
# Три аргумента: нечётные числа от 1 до 10
for i in range(1, 10, 2):
print(i)
# Отрицательный шаг
for i in range(10, 0, -2):
print(i)
Управление циклом: break, continue, else
break
Прерывает выполнение цикла досрочно.
for letter in "Python":
if letter == "h":
break
print(letter)
continue
Пропускает текущую итерацию и переходит к следующей.
for letter in "Python":
if letter == "h":
continue
print(letter)
else
Блок else выполняется, только если цикл завершился без break.
for letter in "Python":
if letter == "a":
break
print(letter)
else:
print("Цикл завершён нормально.")
Вложенные циклы
Вложенный цикл находится внутри другого цикла. Внутренний цикл выполняется полностью для каждой итерации внешнего.
for i in "AB":
for j in "12":
print(i, j)
current_hours = 8
hours = 3
end_time = current_hours + hours
while current_hours < 24 and current_hours < end_time:
for minutes in range(60):
print("Время (часов:минут): ", current_hours, ":", minutes, sep="")
current_hours += 1
Коллекции и изменяемые типы
Коллекция — структура данных для хранения множества элементов. Изменяемый тип данных позволяет изменять содержимое после создания объекта. Список — изменяемый; строка и число — неизменяемые.
numbers = [1, 2, 3]
numbers[0] = 100
print(numbers) # [100, 2, 3]
text = "hello"
# text[0] = "H" # TypeError: 'str' object does not support item assignment
Список (list)
Список — упорядоченная изменяемая коллекция, которая может содержать элементы любых типов.
fruits = ["apple", "banana", "cherry"]
numbers = [1, 2, 3]
mixed = [42, "Python", 3.14, True, [1, 2, 3]]
print(fruits)
print(numbers)
print(mixed)
Создание списков
# Пустой список
empty = []
also_empty = list()
# С элементами
my_list = [1, 2, 3, 4]
# Из строки
chars = list("python")
print(chars)
# Из range
values = list(range(0, 10, 2))
print(values)
Индексация и срезы
Индексация начинается с 0; последний элемент — -1. Срез list[start:stop:step] возвращает подсписок, не изменяя исходный.
my_list = ["apple", "banana", "cherry", "date"]
print(my_list[0]) # apple
print(my_list[-1]) # date
print(my_list[-4]) # apple
my_list = [0, 1, 2, 3, 4, 5, 6]
print(my_list[1:4]) # [1, 2, 3]
print(my_list[::2]) # [0, 2, 4, 6]
print(my_list[::-1]) # [6, 5, 4, 3, 2, 1, 0]
print(my_list[-4:-1]) # [3, 4, 5]
print(my_list[:]) # копия
Изменение списка
items = ["apple", "banana", "cherry"]
items[1] = "blueberry"
print(items)
numbers = [10, 20, 30, 40, 50]
numbers[1:3] = [200, 300]
print(numbers)
values = [100, 200, 300, 400]
values[-1] = 500
print(values)
Операции со списками
list1 = [1, 2, 3]
list2 = [4, 5, 6]
print(list1 + list2) # конкатенация
print([0] * 5) # повторение
numbers = [1, 2, 3, 4, 5]
print(3 in numbers) # True
print(6 in numbers) # False
print(len(numbers)) # 5
Цикл for со списками
my_list = [1, 2, 3, 4, 5]
for item in my_list:
print(item)
my_strings = ["apple", "banana", "cherry"]
for word in my_strings:
for letter in word:
print(letter, end="")
print()
Современные практики
Если нужен одновременно индекс и значение, удобна функция enumerate(). Для создания нового списка из существующей последовательности часто используют list comprehensions. Для форматирования строк — f-strings.
fruits = ["apple", "banana", "cherry"]
for index, fruit in enumerate(fruits):
print(f"{index}: {fruit}")
numbers = [1, 2, 3, 4, 5, 6]
even_numbers = [n for n in numbers if n % 2 == 0]
print(even_numbers)
enumerate(), f-strings и list comprehensions выходят за рамки исходного занятия. Они описаны в официальной документации Python и в материалах Real Python (см. Ресурсы).