python中的filter
⑴ python 中关于filter函数问题求教
看文字的话会很乱,和图一起看会好一点
首先,it是个生成器(_odd_iter),并使n=3,随后,it作为一个生成器存在于filter对象中(迭代器),并使it为一个filter对象,经过循环,到达next语句,先计算it _odd_iter(生成器),生成了新的数之后,开始计算filter。第一次循环的时候第18行的代码相当于 it = filter(_not_divisible(3), it ),等号右面的it还在等待next调用生成值,生成值之后,就将它代入为lambda的x中……第二次循环的时候第18行代码变成 it = filter(_not_divisible(5), filter(_not_divisible(3), it ) ),同样等号右面的it仍然在等待next调用生成新的值
我刚看这个教程,不知道对不对。。。
对了我看见有一个人问把代码第18行改成 it = filter(lambda x: x % n > 0, it)
会失去过滤功能,我觉得,lambda是一个临时函数,所以觉得像filter(div(5), filter(div(3), it))这种存在多个lambda临时函数的话是很奇怪的,
在调试时,发现filter只检测了一个n(最近被赋值的),相当于7%5,9%7这样,因此失去过滤素数功能。模拟一下,在将要输出5的时候,it = filter()的那行代码变为:
it = filter(lambda x : x % n >0 , filter (lambda x : x % n > 0 , it ) ),it将值赋给x,但是,我觉得n被赋值时,会刷新其他lambda中的n,造成类似于 it =filter(lambda x : x % 5 >0 , filter (lambda x : x % 5 > 0 , it ) )的情况
⑵ 在python中,使用filter语句实现
我感觉这个场景不应该用 filter 来实现
因为 filter 做过滤的依据是序列中的元素内容
而这个场景的过滤依据的是元素出现的次序
如果一定要用 filter 也不是不可以,只是非常的别扭……
deffunc(lst):
whilelen(lst)>1:
lst=zip(*filter((lambdai:i[0]%2),enumerate(lst)))[1]
returnlst[0]iflstelseNone
printfunc([0,1,2,3,4,5,6,7,8,9])
#>>7
⑶ python中的filter()函数怎么用特别是一个函数有多个输入参数时。
map是把函数调用的结果放在列表里面返回,它也可以接受多个 iterable,在第n次调用function时,将使用iterable1[n], iterable2[n], ...作为参数。
filter(function, iterable)
这个函数的功能是过滤出iterable中所有以元素自身作为参数调用function时返回True或bool(返回值)为True的元素并以列表返回.
def f_large_than_5(x):
return x > 5
filter(f_large_than_5, range(10))
>>[6,7,8,9]
⑷ python中filter和map的区别
li=[11,22,33,44,55,66]
ret=filter(lambdaa:a>33,li)
print(list(ret))
filter是过滤集合中的部分结果
ret2=map(lambdaa:a+100,li)
print(list(ret2))
map是映射每一个元素
⑸ python filter对象怎么遍历
纠正一下你的这句话
其实才是真正的filter的入参,而x指的是filter的另一个入参it。
这里的it是一个生成器对象,而filter每次会得到一个由它生成的值。所以x指的不是it,只是it产生的一个值。
至于怎么实现将it中的数据遍历下去,这个很好解释。
我们知道filter接受两个参数function和iterable。而filter的功能就等价于(item for item in iterable if function(item)),它就是这么遍历完的。。。
it里面到底是啥? 正如你知道的,它就是一个生成器对象。每当一次调用结束后它就会挂起,直到下一次被激活。
while True:
n = next(it)
yield n it = filter(_not_divisible(n), it)#怎么就实现了循环遍历 it了?
它的实质就是把得到的每个素数从生成器中剔除。
⑹ python中纯数列表开平方结果为整数怎么表示
用高阶函数filter() 判断一个数的平方根是否是整数?
filter()函数是 Python 内置的一个高阶函数,filter()函数接受一个函数function 和一个列表list,这个接收到的函数function的作用是对列表list中每个元素进行判断,返回 True或 False,filter()根据判断结果自动过滤掉不符合条件(False)的元素,返回由符合条件元素组成的新列表list。
⑺ python中的filter函数怎么用
filter就是按条件筛选:
filter(bool,['spam','','ni'])
list(filter(bool,[''spam,'','ni']))
输出的结果为['spam','ni']
#按照bool型筛选,因为中间的‘’,为空,不是bool型所以过滤掉。
⑻ 关于Python中filter 和map这两个方法有区别吗用法和结果都是一样的
filter 是过滤器,你提供一个方法判断,它就把符合这个方法的数据过滤出来;
map 是映射,你提供一种转换方式,它将遍历列表或者元祖或者别的什么数据按照这种转换方式全部转换。
⑼ python filter函数
不会死循环,生成器是个虚拟抽象的概念,你可以认为_odd_iter()primes() 里面运行的时候
python解释器并不生成实际的List,也就不会耗费内存和时间
真正分配给List内存只在以下过程, primes()这个生成器是逐步分配内存的!!
forninprimes():
ifn<1000:
print(n)
else:
break
另外提醒你下,你的程序只能在Python 3.x版本下正确运行:-)因为你用的是 filter返回生成器对象的用法!!如果你要你的程序在Python 2.x正确运行,需改成如下形式。
根据你最新的追问,“为什么it=filter(lambda x : x%n>0 ,it)不行??“直接在filter里用Lambda表达式是完全可以的,你的原因是你的Lambda表达式漏输入了一个n,请看如下形式.
#Python2.x下需导入itertools库的ifilter才能和python3.x的filter等效
importitertools
def_odd_iter():
n=1
whileTrue:
n=n+2
yieldn
def_not_divisible(n):
returnlambdax:x%n>0
defprimes():
yield2
it=_odd_iter()
whileTrue:
n=next(it)
yieldn
#it=itertools.ifilter(_not_divisible(n),it)
it=itertools.ifilter(lambdax,n=n:x%n>0,it)
forninprimes():
ifn<1000:
print(n)
else:
break
⑽ python3.2 的filter()和map()怎么用。
filter(function, iterable)
map(function, iterable)
filter将 function依次作用于iterable的每个元素,如果返回值为true, 保留元素,否则从iterable里面删除
例如:
def test(x):
return (x > 3)
filter(test, [1, 2, 3, 4, 5]) =====> [4, 5]
map将function作用于iterable,每个元素,将对应输出结果保存为一个list
例如
def add(x):
return (1 + x)
map(test, [1, 2, 3, 4, 5]) =====> [2, 3, 4, 5, 6]