我正在尝试使用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?
答案 0 :(得分:6)
因为True
仅保留了所提供的方法为其返回def evenNum(num):
if num % 2 == 0 :
return num
的那些元素。您的方法:
bool
不返回None
,而是返回False
(已翻译为num
)或bool(num)
(也已翻译为bool(0) == False
)。还有def evenNum(num):
return num % 2 == 0
,因此您的filter方法不会传递0。您需要对其进行修改以返回bool值:
Dim r As Range, s As Range
Set r = Range("B2:C3") ' r is a 4-cell range object at B2
Set s = r.AdjustMe(OffsetRows:=-1,OffsetColumns:=2,Columns:=+2,Rows:=+3) ' s is now a 20-cell range at D1
Set s = s.AdjustMe(Rows:=-4) ' s is now a single row reference
答案 1 :(得分:3)
您的函数不会返回相同的东西。您的lambda正确返回一个布尔值。但是您的另一个函数将返回数字本身。而0为布尔False。
要获得正确的结果,您应该返回布尔值:
Float
答案 2 :(得分:1)
您的函数返回的数字是偶数。否则,它返回None。
如果数字为偶数,则您的lambda返回True,否则返回False。
如果您对每个函数返回的内容进行过滤,则您的函数将排除0,因为0的计算结果为false。 lambda将返回True表示0,因此将包含在内。