鱼C论坛

 找回密码
 立即注册
查看: 2900|回复: 6

[已解决]关于filter的问题

[复制链接]
发表于 2018-3-30 18:08:34 | 显示全部楼层 |阅读模式

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

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

x
视频教程中的案例是判断奇数偶数
def odd(x):
     return x%2
list(filter(odd,range[10]))

filter不是判断后一项是否符合前面函数的筛选器吗?由于执行odd函数的结果是0或者1,筛选出的结果不应该是0,1吗
最佳答案
2018-3-30 18:33:58
本帖最后由 tifa2018 于 2018-3-30 18:43 编辑

我稍作修改
  1. def odd(x):
  2.     return x % 2
  3. print(list(filter(odd,list(range(10)))))
复制代码


----------------------------
不要忘了这个知识点

在 Python 看来,只有以下内容会被看作假(注意冒号括号里边啥都没有,连空格都不要有!):False None 0 "" '' () [] {}

其他一切都被解释为真!
-----------------------------

分析下:
filter符合条件的0%2= 0 ,丢掉,
1% 2= 1,数字是true,留下

2%2 =0 丢掉

3%2 = 1 ,留下

以此类推

输出结果
[1, 3, 5, 7, 9]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-3-30 18:21:28 | 显示全部楼层
filter()函数是 Python 内置的另一个有用的高阶函数,filter()函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,返回 True或 False,
如果是True,就把这个元素留下,False就丢掉
filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list。

例子
取列表的奇数
  1. li = [1, 4, 6, 7, 9, 12, 17]
  2. def filter_old(n):
  3.     if n % 2 == 1:
  4.         return n
  5. res = list(filter(filter_old,li))
  6. print(res)
复制代码


输出结果

  1. [1, 7, 9, 17]
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-30 18:25:11 | 显示全部楼层
你和map搞反了。map是后边的往前面的代入
filter是把后边代入前面能满足前面为True的元素以可迭代对象返回
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-30 18:28:01 | 显示全部楼层
range[10]这里用中括号是什么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-30 18:33:58 | 显示全部楼层    本楼为最佳答案   
本帖最后由 tifa2018 于 2018-3-30 18:43 编辑

我稍作修改
  1. def odd(x):
  2.     return x % 2
  3. print(list(filter(odd,list(range(10)))))
复制代码


----------------------------
不要忘了这个知识点

在 Python 看来,只有以下内容会被看作假(注意冒号括号里边啥都没有,连空格都不要有!):False None 0 "" '' () [] {}

其他一切都被解释为真!
-----------------------------

分析下:
filter符合条件的0%2= 0 ,丢掉,
1% 2= 1,数字是true,留下

2%2 =0 丢掉

3%2 = 1 ,留下

以此类推

输出结果
[1, 3, 5, 7, 9]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-30 18:49:05 | 显示全部楼层
tifa2018 发表于 2018-3-30 18:21
filter()函数是 Python 内置的另一个有用的高阶函数,filter()函数接收一个函数 f 和一个list,这个函数 f  ...

想追问一下,这里的余数0,1和逻辑0(false),1(true)不能直接认为是一样的吧?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-30 18:53:11 | 显示全部楼层
苏飞 发表于 2018-3-30 18:49
想追问一下,这里的余数0,1和逻辑0(false),1(true)不能直接认为是一样的吧?

是不能直接认为是一样,不过在内存中Ture的确是以1的形式存储的,False是以0的形式存储的
但是它们是不同的类型,一个是布尔类型,用来进行逻辑判断就是判断真假的
一个是整数0,1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 10:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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