Встроенные функции Python: часть 2 (map, filter, zip, и др.)
🔄 Функция map(): Трансформация данных без циклов
Когда нужно применить одну функцию ко всем элементам коллекции, map() — твой лучший друг!
numbers = [1, 2, 3, 4]
squared = list(map(lambda x: x ** 2, numbers))
print(squared) # [1, 4, 9, 16]
Как это работает?
- Первый аргумент — функция (можно использовать lambda или обычную функцию)
- Второй аргумент — итерируемый объект
- Возвращает итератор (поэтому оборачиваем в list())
🔥 Реальный пример: Конвертация температуры из Цельсия в Фаренгейт
celsius = [0, 10, 20, 37]
fahrenheit = list(map(lambda c: (9/5)*c + 32, celsius))
print(fahrenheit) # [32.0, 50.0, 68.0, 98.6]
Функция filter(): Искусство отбора
Нужны только те элементы, которые удовлетворяют условию? filter() сделает это элегантно!
numbers = [1, 2, 3, 4, 5, 6]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers) # [2, 4, 6]
Важные нюансы:
- Возвращает итератор с элементами, для которых функция вернула True
- Если передать None вместо функции, будут отобраны "истинные" элементы:
values = [0, 1, '', 'hello', None, False, True]
truthy = list(filter(None, values))
print(truthy) # [1, 'hello', True]
🤝 Функция zip(): Параллельные миры коллекций
Объединяет элементы нескольких итерируемых объектов попарно — как молния на куртке!
names = ['Alice', 'Bob', 'Charlie']
ages = [25, 30, 35]
zipped = list(zip(names, ages))
print(zipped) # [('Alice', 25), ('Bob', 30), ('Charlie', 35)]
Лайфхак: Можно распаковать обратно с помощью zip(*zipped)
💡 Практическое применение: Создание словаря из двух списков
person_dict = dict(zip(names, ages))
print(person_dict) # {'Alice': 25, 'Bob': 30, 'Charlie': 35}
🎭 Функция enumerate(): Индексы и значения в одном флаконе
Больше никаких range(len())! Получай индекс и значение одновременно.
fruits = ['apple', 'banana', 'cherry']
for index, fruit in enumerate(fruits, start=1):
print(f"{index}. {fruit}")
Вывод:
1. apple
2. banana
3. cherry
Параметр start позволяет начать нумерацию с любого числа (по умолчанию 0).
🧮 Функция sum(): Не только для чисел
Все знают, что sum() складывает числа, но она умеет больше!
# Сумма чисел
numbers = [1, 2, 3, 4]
print(sum(numbers)) # 10
# С начальным значением
print(sum(numbers, 10)) # 20
# Сложение списков (начиная с Python 3.8)
lists = [[1, 2], [3, 4], [5, 6]]
print(sum(lists, [])) # [1, 2, 3, 4, 5, 6]
️ Функция any() и all(): Логические детективы
Эти функции — мощные инструменты для проверки условий:
# any() возвращает True, если хотя бы один элемент истинный
checks = [False, True, False]
print(any(checks)) # True
# all() возвращает True, если все элементы истинные
print(all(checks)) # False
Отличный пример из практики Данилы Бежина (https://www.youtube.com/@DanilaBezhin):
# Проверка, все ли числа в списке положительные
numbers = [1, 2, 3, -4, 5]
if not all(x > 0 for x in numbers):
print("Есть отрицательные числа!")
Когда что использовать: Шпаргалка
| Функция | Когда использовать | Альтернатива |
|---|---|---|
map() |
Трансформация всех элементов | Генератор списка |
filter() |
Отбор элементов по условию | Генератор с if |
zip() |
Параллельная обработка нескольких коллекций | enumerate() |
enumerate() |
Нужны и индексы, и значения | range(len()) |
Попробуй решить эту задачу, используя изученные функции:
# Дан список слов, вернуть список длин слов, которые начинаются на 'a'
words = ['apple', 'banana', 'apricot', 'cherry', 'avocado']
# Решение: [len(word) for word in words if word.startswith('a')]
# Или с map и filter: list(map(len, filter(lambda x: x.startswith('a'), words)))
Теперь ты вооружён мощными инструментами Python! Эти функции сделают твой код чище, а работу — приятнее. Экспериментируй и комбинируй их для решения сложных задач простыми способами.