Функция map — это полезный инструмент для применения определенного процесса или функции к каждому элементу в списке, и она есть как в Python, так и в JavaScript. В этом посте мы рассмотрим, как map работает на обоих языках, а также несколько примеров различных вариантов использования и различия между ними.

Представьте, что у вас есть список ингредиентов для рецепта, и вы хотите создать новый список с размерами для каждого ингредиента. В Python map был бы похож на шеф-повара, который берет каждый ингредиент и называет его количество по ходу приготовления, не записывая его. Это более эффективно, если вам нужно использовать измерения только один раз, но если вы хотите сохранить измерения на потом, вам придется записать их самостоятельно (путем переноса вызова map в list).

В JavaScript map похож на шеф-повара, который записывает количество каждого ингредиента на отдельном листе бумаги, прежде чем перейти к следующему. Это займет немного больше времени, но в итоге вы получите список всех измерений, к которым вы можете вернуться в любое время.

Общие черты:

  • map принимает список значений и функцию в качестве входных данных и применяет функцию к каждому элементу в списке.
  • map возвращает новый список с результатами применения функции к каждому элементу в списке
  • map часто используется для преобразования списка значений из одной формы в другую.

Отличия:

  • В Python map возвращает итератор, который выдает результаты на лету, а не создает новый список. Это может быть более эффективным, если вам нужно перебрать результаты только один раз, но это означает, что вам нужно обернуть вызов map в list, если вы хотите создать новый список со всеми результатами.
  • В JavaScript map возвращает новый массив со всеми результатами, поэтому вам не нужно делать ничего особенного для создания нового списка.
  • В JavaScript вы можете передать map "стрелочную функцию" в качестве функции обратного вызова, что является сокращением.

Пример 1. Преобразование списка строк в верхний регистр

В Питоне:

words = ['cat', 'window', 'defenestrate']
uppercase_words = list(map(str.upper, words))
print(uppercase_words) # ['CAT', 'WINDOW', 'DEFENESTRATE']

В Javascript:

const words = ['cat', 'window', 'defenestrate'];
const uppercaseWords = words.map(word => word.toUpperCase());
console.log(uppercaseWords); // ['CAT', 'WINDOW', 'DEFENESTRATE']

Пример 2. Умножение каждого элемента в списке чисел на постоянное значение

В Питоне:

numbers = [1, 2, 3, 4]
doubled_numbers = list(map(lambda x: x * 2, numbers))
print(doubled_numbers) # [2, 4, 6, 8]

В Javascript:

const numbers = [1, 2, 3, 4];
const doubledNumbers = numbers.map(x => x * 2);
console.log(doubledNumbers); // [2, 4, 6, 8]

Пример 3. Преобразование списка температур из градусов Фаренгейта в градусы Цельсия

В Питоне:

def fahrenheit_to_celsius(fahrenheit):
    celsius = (fahrenheit - 32) * 5 / 9
    return int(celsius)

temperatures_fahrenheit = [32, 60, 212]
temperatures_celsius = list(map(fahrenheit_to_celsius, temperatures_fahrenheit))
print(temperatures_celsius)  # [0, 15, 100]

В JavaScript:

const fahrenheitToCelsius = fahrenheit => {
  const celsius = (fahrenheit - 32) * 5 / 9;
  return Math.floor(celsius);
};

const temperaturesFahrenheit = [32, 60, 212];
const temperaturesCelsius = temperaturesFahrenheit.map(fahrenheitToCelsius);
console.log(temperaturesCelsius);  //[0, 15, 100]

Пример 4. Округление списка чисел до ближайшего целого числа

В Питоне:

import math

numbers = [1.5, 2.3, 3.7, 4.2]
rounded_numbers = list(map(math.floor, numbers))
print(rounded_numbers)  # [1, 2, 3, 4]

В JavaScript:

const numbers = [1.5, 2.3, 3.7, 4.2];
const roundedNumbers = numbers.map(Math.floor);
console.log(roundedNumbers);  //[1, 2, 3, 4]

Пример 5. Создание списка квадратных корней из списка чисел

В Питоне:

import math

numbers = [1, 4, 9, 16]
square_roots = list(map(int, map(math.sqrt, numbers)))
print(square_roots)  # [1, 2, 3, 4]

В JavaScript:

const numbers = [1, 4, 9, 16];
const squareRoots = numbers.map(Math.sqrt).map(x => Math.floor(x));
console.log(squareRoots);  //[1, 2, 3, 4]

Несмотря на то, что между тем, как map работает в Python и JavaScript, есть несколько различий, основные функции одинаковы. Таким образом, независимо от того, на каком языке вы работаете, вы можете использовать map для простого применения преобразований к вашим данным.

Я надеюсь, что эта статья помогла вам познакомиться с функцией map и показать вам различные способы ее использования. Удачного кодирования!