Функция reduce() в Python — сокращение списка на примерах

В этом уроке вы узнаете, как использовать функцию reduce() Python для сведения списка к одному значению.

Сокращение списка

Иногда вам нужно свести список к одному значению. Предположим, что у вас есть список чисел:

scores = [75, 65, 80, 95, 50]

А чтобы вычислить сумму всех элементов в списке оценок, вы можете использовать такой цикл for:

scores = [75, 65, 80, 95, 50]

total = 0

for score in scores:
    total += score

print(total)

Выход:

365

В этом примере мы свели весь список к одному значению, которое представляет собой сумму всех элементов списка.

Знакомство с функцией reduce() в Python

Python предлагает функцию reduce(), которая позволяет сократить список более лаконично.

Вот синтаксис функции reduce():

reduce(fn,list)

Функция reduce() применяет функцию fn с двумя аргументами кумулятивно к элементам списка слева направо, чтобы свести список к одному значению.

В отличие от функций map() и filter(), функция reduce() не является встроенной функцией в Python. Фактически, она принадлежит модулю functools.

Чтобы использовать функцию reduce(), вам необходимо импортировать ее из модуля functools, используя следующий оператор в верхней части файла:

from functools import reduce

Ниже показано, как использовать функцию reduce() для вычисления суммы элементов списка оценок:

from functools import reduce

def sum(a, b):
    print(f"a={a}, b={b}, {a} + {b} ={a+b}")
    return a + b


scores = [75, 65, 80, 95, 50]
total = reduce(sum, scores)
print(total)

Выход:

a=75, b=65, 75 + 65 = 140
a=140, b=80, 140 + 80 = 220
a=220, b=95, 220 + 95 = 315
a=315, b=50, 315 + 50 = 365
365

Как вы можете ясно видеть из вывода, функция reduce() кумулятивно добавляет два элемента списка слева направо и сводит весь список к одному значению.

Чтобы сделать код более кратким, вы можете использовать лямбда-выражение вместо определения функции sum():

from functools import reduce

scores = [75, 65, 80, 95, 50]

total = reduce(lambda a, b: a + b, scores)

print(total)
Похожие посты
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *