почему не выводит нужные списки с квадратом и кубом из чисел?

Рейтинг: 0Ответов: 2Опубликовано: 04.04.2023

задание: дан список чисел, выведите список квадратов чисел из первого списка и список кубов чисел из первого списка с использованием lambda функций. мой код:

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(list(filter(lambda x: x*x, a)))
print(list(filter(lambda x: x*x*x, a)))

выводит две копии начального списка:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

почему?

Ответы

▲ 0

Если принципиально нужна lambda функция, то делается так:

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
square_numbers = list(map(lambda x: x * x, numbers))
cubes_numbers = list(map(lambda x: x ** 3, numbers))
print(square_numbers)  # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
print(cubes_numbers)  # [1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]

Вместо filter применяется map, которая перебирает поэлементно список чисел и передает каждое число как входной параметр функции lambda.

▲ 0

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

То есть просто нужно заменить filter() на map():

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

print(list(map(lambda x: x*x, a)))
print(list(map(lambda x: x*x*x, a)))

Результат:

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]