#python #python-3.x
#python #python-3.x
Вопрос:
Я пытаюсь отфильтровать четные числа из списка, используя функцию фильтра Python
def evenNum(num):
if num % 2 == 0 :
return num
list1 = [i for i in range(-10 , 10)]
print (list1)
# [-10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(list(filter(evenNum,list1)))
# [-10, -8, -6, -4, -2, 2, 4, 6, 8]
print(list(filter(lambda x: x % 2 == 0 , list1)))
# [-10, -8, -6, -4, -2, 0, 2, 4, 6, 8]
Почему 0 отсутствует при использовании определенной функции?
Комментарии:
1. Ваша
evenNum()
функция возвращает «ложное» значение (ноль) при вводе нуля.
Ответ №1:
Потому filter
что оставляет только те элементы, для которых возвращается предоставленный метод True
. Ваш метод:
def evenNum(num):
if num % 2 == 0 :
return num
Не возвращает bool
, но либо None
который преобразуется False
, либо num
который также преобразуется bool(num)
. И bool(0) == False
, таким образом, ваш метод filter не будет передавать 0. Вам нужно изменить его, чтобы вернуть значение bool:
def evenNum(num):
return num % 2 == 0
Ответ №2:
Ваши функции не возвращают одно и то же. Ваш лямбда-код правильно возвращает логическое значение. Но ваша другая функция возвращает само число; а 0 — это логическое значение False .
Чтобы получить правильный результат, вы должны вернуть bool:
def evenNum(num):
if num % 2 == 0 :
return True
Ответ №3:
Ваша функция возвращает число, если оно четное. В противном случае он возвращает None.
Ваша лямбда возвращает True, если число четное, False в противном случае.
Если вы отфильтруете то, что возвращается каждым из них, ваша функция исключит 0, потому что 0 вычисляется как false . Лямбда вернет значение True для 0, поэтому оно будет включено.