Python 过滤函数对函数和lambda表达式给出不同的结果,为什么?
我试图使用Python的过滤函数从列表中过滤偶数Python 过滤函数对函数和lambda表达式给出不同的结果,为什么?,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))) # [
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?,因为筛选器只保留提供的方法返回True的元素。您的方法:
def evenNum(num):
if num % 2 == 0 :
return num
不返回bool,但返回None(转换为False)或num(转换为boolnum)。bool0==False,因此您的筛选方法不会通过0。您需要修改它以返回布尔值:
def evenNum(num):
return num % 2 == 0
您的函数不会返回相同的内容。您的lambda正确返回布尔值。但是您的另一个函数返回数字本身;0是布尔值False 要获得正确的结果,应返回bool:
def evenNum(num):
if num % 2 == 0 :
return True
如果是偶数,则函数返回该数字。否则,它将返回None 如果数值为偶数,则lambda返回True,否则返回False 如果您根据每个函数返回的内容进行筛选,则函数将排除0,因为0的计算结果为false。lambda将为0返回True,因此它将被包括在内。当给定一个0作为输入时,evenNum函数将返回一个falsy值零。