Найдите нечетные числа в списке и возведите их в квадрат с помощью лямбда-функции

#python #python-3.x #lambda

#python #python-3.x #лямбда

Вопрос:

Вот код, который я получил до сих пор. Теперь вывод [1, 3, 5, 7, 9]

 N = 10
for i in range(1, 10):
    arr.append(i)

arr2 = []
f = lambda x: x ** 2
arr2 = filter(lambda x: x % 2 != 0, arr)
map(lambda x: x ** 2, arr2)
print(list(arr2))```
 

Комментарии:

1. Зачем использовать лямбду вместо понимания списка?

2. @Error-Синтаксическая ошибка Вот в чем задача.

3. Ты правильно filter подобрал роль. Вторая часть, вероятно, должна быть выполнена map аналогичным образом.

4. Предполагается ли, что вы возвращаете только нечетные квадраты или исходный список с исходными четными числами и квадратами нечетных чисел?

5. @MarkMeyer только нечетные.

Ответ №1:

Ваш последний цикл for применяет лямбда-функцию к элементам в вашем списке, но не сохраняет результат. Попробуйте:

 a = [i for i in range(1,10)]
a2 = filter(lambda x: x % 2 != 0, a)
a3 = map(lambda x: x**2, a2)        # This is a generator object
final_list = list(a3)               # This is a list
 

Советы Python по уменьшению фильтра карты

Комментарии:

1. Добавьте вызов list в конце, иначе OP будет сбит с толку, когда попытается print(a3) .

Ответ №2:

Вы отбрасываете результат f(i) , как только вы его создаете. Вам нужно добавить его в некоторый список (кроме того, нет необходимости использовать filter объект в списке):

 result = []
for i in arr2:
    result.append(f(i))
 

Пожалуйста, обратите внимание, что привязка лямбды к идентификатору не рекомендуется в соответствии с PEP 8.

Лучший способ решить эту проблему без понимания списка — это комбинация filter и map тому подобное:

 arr2 = list(map(lambda x: x ** 2, filter(lambda x: x % 2 != 0, arr)))
 

Ответ №3:

Вот очень слегка измененная версия:

 arr = []
N = 10
for i in range(1, N):
    arr.append(i)

arr2 = []
f = lambda x: x ** 2
arr2 = filter(lambda x: x % 2 != 0, arr)
for i in list(arr2):
    print(f(i))
 

arr2 это не список. Это итератор, который вы можете преобразовать в список только один раз.

Вот более компактная версия:

 N = 10
arr = range(1, N)

square = lambda x: x ** 2
keep_odd = lambda x: x % 2 != 0
arr2 = list(filter(keep_odd, arr))
for i in arr2:
    print(square(i))

print(arr2)
 

Выводит:

 1
9
25
49
81
[1, 3, 5, 7, 9]
 

Ответ №4:

Вы не сохраняете значение в массиве, вы просто печатаете его.

 N = 10
for i in range(1, 10):
    arr.append(i)

result = []
f = lambda x: x ** 2
arr2 = filter(lambda x: x % 2 != 0, arr)
for i in arr2:
    result.append(f(i))    
print(result)