从入门到富豪 发表于 2021-2-15 16:53:45

超级抓狂了,filter用函数和直接用lambda计算结果不一样

第一个计算能被2整除的,结果竟然不包含0,不知道为啥, 抓狂几天了,硬是没有找出原因。

def ceshi(x):
    if x%2==0:
      return x
list001 = tuple(range(10)) #生成一个数据列表
print(list001)
a = filter(ceshi,(list001))
print(tuple(a))
#这个结果打印出来(2, 4, 6, 8)我不知道为啥没有0             我的天啊,我直接把list001 写成了(0,) 打印出来直接是空的。

new_list = filter(lambda x: x % 2 == 0, list001)
print(list(new_list))
#这个结果打印出来是 这个是正常的。

洋洋痒 发表于 2021-2-15 17:16:30

1      filter()函数 接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回 True 或 False,最后将返回 True 的元素放到新列表中
你的0作为参数传入ceshi()返回的是0,是False。建议把ceshi()函数return x改为return True即可

2lambda x:x%2==0这个匿名函数的意思是,x%2为0时候整个函数返回True 不为零时整个函数返回False

洋洋痒 发表于 2021-2-15 17:17:01

def ceshi(x):
    if x%2==0:
      return True
list001 = tuple(range(10)) #生成一个数据列表
print(list001)
a = filter(ceshi,(list001))
print(tuple(a))

从入门到富豪 发表于 2021-2-15 17:22:44

非常感谢 痒痒痒童鞋的帮助,果然是这样的。
页: [1]
查看完整版本: 超级抓狂了,filter用函数和直接用lambda计算结果不一样