当前位置:首页 » 编程语言 » filterpython

filterpython

发布时间: 2022-05-07 19:00:49

A. python filter过滤器疑问

过滤器第二个参数可以是生成器也可以是列表,只要是iterable就可以,生成器也是一个iterable。
next()得到的是iterable的一个结果值。
过滤器返回的是一个map,map本身也是一个iterable,可以使用next()或者for去迭代它。
filter()在迭代的时候逐个返回值,与生成器类似,都是在每次调取值时才算出一个来。

B. 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 ) )的情况

C. 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

D. 关于Python的第二个函数问题

filter是python的内置函数,作用通过函数过滤列表。
它有两个参数,第一个函数,返回True或者False,第二个是要过滤的列表。
它会对列表中的所有元素应用第一个函数,如果返回True,就保留,返回False就过滤掉。
print
filter(lambda
x:
x
%
3
==
0,
my_list)
这个语句的作用就是多my_list这个列表进行过滤,返回列表中元素是3的倍数的元素。
如果解决了您的问题请采纳!
如果未解决请继续追问

E. python中的filter函数怎么用

filter()函数是 Python 内置的另一个有用的高阶函数,filter()函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,返回 True或 False,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list。
例如,要从一个list [1, 4, 6, 7, 9, 12, 17]中删除偶数,保留奇数,首先,要编写一个判断奇数的函数:
def is_odd(x):
return x % 2 == 1

然后,利用filter()过滤掉偶数:
>>>filter(is_odd, [1, 4, 6, 7, 9, 12, 17])

结果:
[1, 7, 9, 17]

利用filter(),可以完成很多有用的功能,例如,删除 None 或者空字符串:
def is_not_empty(s):
return s and len(s.strip()) > 0
>>>filter(is_not_empty, ['test', None, '', 'str', ' ', 'END'])

结果:
['test', 'str', 'END']

注意: s.strip(rm) 删除 s 字符串中开头、结尾处的 rm 序列的字符。
当rm为空时,默认删除空白符(包括'\n', '\r', '\t', ' '),如下:
>>> a = ' 123'
>>> a.strip()
'123'
>>> a = '\t\t123\r\n'
>>> a.strip()
'123'
练习:
请利用filter()过滤出1~100中平方根是整数的数,即结果应该是:
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
方法:
import math
def is_sqr(x):
return math.sqrt(x) % 1 == 0
print filter(is_sqr, range(1, 101))

结果:
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

F. 关于Python中filter 和map这两个方法有区别吗用法和结果都是一样的

filter 是过滤器,你提供一个方法判断,它就把符合这个方法的数据过滤出来;
map 是映射,你提供一种转换方式,它将遍历列表或者元祖或者别的什么数据按照这种转换方式全部转换。

G. 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]

H. 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了?

它的实质就是把得到的每个素数从生成器中剔除。

I. 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是映射每一个元素

热点内容
服务器怎么连接到电脑显示屏上 发布:2024-05-21 02:38:21 浏览:285
织梦安装数据库连接失败 发布:2024-05-21 02:37:45 浏览:258
python编程入门经典pdf 发布:2024-05-21 02:31:45 浏览:6
arm编译添加驱动 发布:2024-05-21 02:02:28 浏览:476
安卓设置页面是怎么 发布:2024-05-21 01:32:51 浏览:521
学生成绩管理系统数据库设计 发布:2024-05-21 01:14:41 浏览:43
我的世界什么指令直接出现服务器 发布:2024-05-21 01:10:00 浏览:397
星等算法 发布:2024-05-21 00:53:06 浏览:509
李兴华的java视频 发布:2024-05-21 00:49:55 浏览:605
数据库4种索引类型 发布:2024-05-21 00:47:29 浏览:241