Найти нечетные числа в списке и возвести их в квадрат, используя лямбда-функцию - PullRequest
1 голос
/ 19 апреля 2019

Вот код, который я получил до сих пор.Теперь вывод [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))```

Ответы [ 4 ]

2 голосов
/ 19 апреля 2019

Ваш последний цикл 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 по фильтру карты уменьшите

2 голосов
/ 19 апреля 2019

Вы отбрасываете результат 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)))
2 голосов
/ 19 апреля 2019

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

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]
1 голос
/ 19 апреля 2019

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

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...