鱼C论坛

 找回密码
 立即注册
查看: 1231|回复: 3

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

[复制链接]
发表于 2021-2-15 16:53:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
第一个计算能被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))
#这个结果打印出来是[0, 2, 4, 6, 8] 这个是正常的。
最佳答案
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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-15 17:22:44 | 显示全部楼层
非常感谢 痒痒痒童鞋的帮助,果然是这样的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-16 13:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表