为什么use_filter(data) 和test_filter(data) 输出的结果不一致?

为什么use_filter(data) 和test_filter(data) 输出的结果不一致?

'''
使用filter函数,求0-50以内(包括50)的偶数
'''
def oushu(n):
    if n % 2 == 0:
        #print(n)
        return n

def use_filter(data):
    result = filter(lambda i : i % 2 == 0, data)
    #result1 = filter(oushu , data)
    print(list(result))
   # print(list(result1))

def test_filter(data):
    result = filter(oushu , data)
    print(list(result))

if __name__ == "__main__":
    #data = [1, 2, 3, 5, 6, 7, 8, 9, 10]
    data = list(range(0, 51))
    use_filter(data)
    test_filter(data)


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕美 2019-03-26 10:12:47

同学,你好,flter()函数是将返回 True 的元素放到新列表中。当n=0时,oushu()函数的返回值为return 0,Python中0表示False。即filter将元素0视为不符合条件,所以执行test_filter(data)时,返回的列表中缺少元素0。可以将oushu()函数的返回值设为return 1(非0即可),即当满足条件时返回结果为True,就会将元素放到新的列表中。

参考代码:

http://img1.sycdn.imooc.com//climg/5c99895400014d1703020141.jpg

如果我的回答解决了您的疑惑,请采纳!祝学习愉快~~~~

  • 提问者 thinkwinter #1
    为什么把 oushu()修改成 def oushu(n): return n % 2 == 0 就输出一致了呢?
    2019-03-26 12:49:27
  • 好帮手慕美 回复 提问者 thinkwinter #2
    当n=0时,0 % 2 == 0结果为True,所以输出的列表中有元素0,结果一致呀。
    2019-03-26 12:55:15
  • hzhawk 回复 提问者 thinkwinter #3
    return n 返回的是数字0, return n % 2 == 0 返回的是布尔值True。 result = filter(oushu , data) 这里filter要判断oushu的布尔值,0的布尔值是Flase,这时data列表里的0就会被剔除。而return n % 2 == 0 返回的是布尔值True,data列表里的0就会被保留。
    2019-06-13 07:48:21
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
1.Python零基础入门
  • 参与学习           人
  • 提交作业       2727    份
  • 解答问题       8160    个

想要进入Python Web、爬虫、人工智能等高薪领域,你需要掌握本阶段的Python基础知识,课程安排带你高效学习轻松入门,学完你也能听得懂Python工程师的行业梗。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师