Цикл for и срезы
Цикл for повторяет действие для каждого элемента. Срез берёт часть списка. Это основа любой обработки данных.
Цикл for
Заголовок раздела «Цикл for»amounts = [49.9, 15.0, 120.0, 35.5]for a in amounts: print(a)
total = 0for a in amounts: total += aprint(total)Ответ:
49.915.0120.035.5220.4- После
for ...:идёт блок с отступом в 4 пробела. Отступ обязателен. Без него будетIndentationError: expected an indented block. total += aзначитtotal = total + a.forработает со списками, строками, файлами и всем, что можно перебрать.
range даёт последовательность чисел.
print(list(range(5)), list(range(2, 6)), list(range(0, 10, 3)))for i in range(3): print("step", i)Ответ:
[0, 1, 2, 3, 4] [2, 3, 4, 5] [0, 3, 6, 9]step 0step 1step 2range(n)— от0доn-1.range(a, b)— отaдоb-1. Правая граница не входит.range(a, b, step)— с шагом.
enumerate и zip
Заголовок раздела «enumerate и zip»enumerate даёт номер и значение. zip идёт по двум спискам сразу.
users = ["anna", "bob", "carl"]for i, u in enumerate(users, start=1): print(i, u)
for u, a in zip(users, amounts): print(u, a)Ответ:
1 anna2 bob3 carlanna 49.9bob 15.0carl 120.0Не пишите range(len(users)) и индексы вручную. enumerate читается лучше.
Срез: x[start:stop:step]. Правая граница не входит. Любую часть можно пропустить.
n = [10, 20, 30, 40, 50]print(n[:2], n[2:], n[1:4], n[-2:], n[::2], n[::-1])print("hello"[1:3])Ответ:
[10, 20] [30, 40, 50] [20, 30, 40] [40, 50] [10, 30, 50] [50, 40, 30, 20, 10]el| Срез | Что даёт |
|---|---|
n[:2] | Первые 2 элемента |
n[-2:] | Последние 2 элемента |
n[1:4] | Элементы с индексами 1, 2, 3 |
n[::2] | Каждый второй |
n[::-1] | Список задом наперёд |
Срез всегда создаёт новый список. Для строк работает так же.
List comprehension
Заголовок раздела «List comprehension»Короткая запись цикла, который строит список.
print([a * 2 for a in [1, 2, 3]])print([a for a in amounts if a > 30])print([u.upper() for u in users])Ответ:
[2, 4, 6][49.9, 120.0, 35.5]['ANNA', 'BOB', 'CARL']Форма: [что_сделать for x in список if условие]. Часть if необязательна. Она оставляет только подходящие элементы.
Кортежи (tuple)
Заголовок раздела «Кортежи (tuple)»tuple похож на список, но его нельзя менять. Пишут в круглых скобках. Удобен для строки данных с постоянным набором полей.
row = ("anna", 49.9)user, amount = rowprint(row[0], user, amount)row[1] = 50Ответ:
anna anna 49.9TypeError: 'tuple' object does not support item assignment- Доступ по индексу как у списка:
row[0]. user, amount = rowраскладывает кортеж по переменным. Так же работаетfor i, u in enumerate(...).- Изменить элемент нельзя. Можно только создать новый кортеж.
Сортировка
Заголовок раздела «Сортировка»sorted(x, key=..., reverse=...). Параметр key — функция, которая даёт значение для сравнения.
rows = [("anna", 49.9), ("bob", 15.0), ("carl", 120.0)]print(sorted(rows, key=lambda r: r[1], reverse=True))print(sorted(["b", "A", "c"]))print(sorted(["b", "A", "c"], key=str.lower))print(sorted(users, key=len))Ответ:
[('carl', 120.0), ('anna', 49.9), ('bob', 15.0)]['A', 'b', 'c']['A', 'b', 'c']['bob', 'anna', 'carl']lambda r: r[1]— маленькая функция «возьми второй элемент».- Большие буквы идут раньше маленьких. Чтобы игнорировать регистр, используйте
key=str.lower. - Сортировка стабильная: равные элементы сохраняют порядок.
Где это в работе
Заголовок раздела «Где это в работе»- Перебор строк файла и записей из API.
- Очистка колонки:
[x.strip().lower() for x in col]. - Срезы: первые строки для проверки, последние N записей лога.
sorted(..., key=...)— топ-N по сумме, последние события.
Практика
Заголовок раздела «Практика»Задание 1
Заголовок раздела «Задание 1»Выведите каждую сумму из [49.9, 15.0, 120.0, 35.5] с двумя знаками после точки, по одной в строке.
Проверка:
49.9015.00120.0035.50Решение
amounts = [49.9, 15.0, 120.0, 35.5]for a in amounts: print(f"{a:.2f}")Задание 2
Заголовок раздела «Задание 2»Посчитайте, сколько заказов больше 30. Используйте list comprehension с if и len.
Проверка: 3
Решение
print(len([a for a in amounts if a > 30]))Задание 3
Заголовок раздела «Задание 3»Добавьте к каждой сумме НДС 20% и округлите до 2 знаков. Результат — новый список.
Проверка: [59.88, 18.0, 144.0, 42.6]
Решение
print([round(a * 1.2, 2) for a in amounts])Задание 4
Заголовок раздела «Задание 4»Выведите первые две и последние две суммы.
Проверка: [49.9, 15.0] [120.0, 35.5]
Решение
print(amounts[:2], amounts[-2:])Задание 5
Заголовок раздела «Задание 5»Выведите пользователей anna, bob, carl с номерами, начиная с 1, в формате 1. anna.
Проверка:
1. anna2. bob3. carlРешение
users = ["anna", "bob", "carl"]for i, u in enumerate(users, start=1): print(f"{i}. {u}")Задание 6
Заголовок раздела «Задание 6»Есть список пар rows = [("anna", 49.9), ("bob", 15.0), ("carl", 120.0)]. Найдите заказ с минимальной суммой через sorted.
Проверка: ('bob', 15.0)
Решение
rows = [("anna", 49.9), ("bob", 15.0), ("carl", 120.0)]print(sorted(rows, key=lambda r: r[1])[0])Что запомнить
Заголовок раздела «Что запомнить»for x in items:— блок с отступом выполняется для каждого элемента.enumerateдаёт номер,zipсоединяет два списка.- Срез
x[a:b:s]: правая граница не входит,[-n:]— последниеn. - List comprehension:
[f(x) for x in items if cond]. sorted(items, key=...)сортирует по любому полю.
Дальше: Python Crash Course, глава 4.
Следующий урок: Условия if.