Вопрос17
Осталось:

Как работают встроенные функции map, filter и zip?

Образцовый ответ

Показывать ответ по умолчанию

map — применяет функцию к каждому элементу:

numbers = [1, 2, 3, 4, 5]
squares = list(map(lambda x: x ** 2, numbers))
# [1, 4, 9, 16, 25]

# Эквивалент через comprehension
squares = [x ** 2 for x in numbers]

filter — отбирает элементы по условию:

numbers = [1, 2, 3, 4, 5, 6]
evens = list(filter(lambda x: x % 2 == 0, numbers))
# [2, 4, 6]

# Эквивалент через comprehension
evens = [x for x in numbers if x % 2 == 0]

zip — объединяет несколько коллекций:

names = ["Анна", "Борис", "Вера"]
ages = [25, 30, 22]

pairs = list(zip(names, ages))
# [('Анна', 25), ('Борис', 30), ('Вера', 22)]

# Часто используется для создания словаря
user_ages = dict(zip(names, ages))
# {'Анна': 25, 'Борис': 30, 'Вера': 22}

Особенности:

  • Все три функции возвращают итераторы, а не списки — для получения списка нужно обернуть в list().
  • zip останавливается по самой короткой коллекции.
  • В большинстве случаев list comprehension считается более читаемой альтернативой map и filter.