python中filter函数
A. python3.3的fliter()函数
python3 起,抄filter 函数返回的对象从列表改为 filter object(迭代器),
想要使用的话加上list(),将迭代器转换成列表,例如:
list1= [1, 4, 6, 7, 9, 12, 17]
def is_odd(x):
return x % 2 == 1
print(list(filter(is_odd,list1)))
B. python问题: filter+无限生成器,循环filter
前面的问题我已经在另外的提问里答过了
根据你最新的追问,“为什么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
C. python 中用filter求素数的时候,这里的筛选函数是什么意思
首先定义一个函数判断是否为素数,如果这个数能被2~它的平方根中内的任一数整除的话它就不容是素数,否则就是素数。用flag为0或1标记,利用filter()筛掉flag为0的非素数。
#!/usr/bin/envpython
#coding:utf-8
importmath
deffilter_prime(n):#定义filter_prime函数
flag=1#设置flag,初始化为1
foriinrange(2,int(math.sqrt(n)+1)):#取2至平方根的数
ifn%i==0:#判断是否是素数
flag=0#如果不是,flag设为0
ifflag==1:#退出循环后判断flag,若为1(素数),则返回
returnn
printfilter(filter_prime,range(1,101))#filter1-100里的非素数
D. 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]
E. 关于python中的取余和filter函数
把print(f(l))这句去掉就可以了,list类型不能和int类型进行运算
F. python程序,filter函数,2.7环境与3.1环境的不同
3.x 返回的是一个iter obj,如果想返还【】,要加上list()
>>> list(filter(bigger_than_five,[1,10]))
[6, 7, 8, 9, 10]
其实3.x里面,达到你的这个目的的最简单的方法就直接:
>>> [x for x in range(11) if x > 5]
[6, 7, 8, 9, 10]
G. 在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
H. 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]
I. python中的filter函数怎么用
python filter内建函数
filter函数是python内建函数,可以操作任何可迭代类型,如list,tuple,string.
filter需要带上一个函数function和一个可迭代序列作为参数。filter()将调用该function作用于每一个可迭代序列的元素,并返回一个由该function验证后返回值为true的元素组成新的可迭代序列,新序列的类型保持与filter参数序列的类型一致
2.filter与数字
下面用这个例子来说明:
#建个数字列表
numbers=[1,5,9,8,4,6,3,7]
#定义一个过滤标准,取小于5的数
deflessThanFive(element):
returnelement<5
printfilter(lessThanFive,numbers)
输出结果是列表:[1,4,3]
解说:此处的过滤函数lessThanFive必需带入一个参数(filter()会调用lessThanFive,参数是列表nembers中的每一个元素,一次一个)。filter()返回所有值都是小于5的列表
3.filter与字符串
下面用如下例子说明:
#定义元组类型
names=('Jack','Jill,'Steve','')
#筛选出名字
new_names=filter(None,names)
printnew_names
输出结果是元组:
('Jack','Jill,'Steve')
在元组names最后一个名字是空字符串,而filter的第一个参数是None,这说明需要使用identity函数(该函数是简单的返回该元素的)
因为python对空字符串,0和None作为False,所以上面的filter的语句就是移除空元素。
4.filter和函数
目的:找出以J开头的名字
defstartsWithJ(element):
ifelement:
returnelement[0]=='J'
returnFalse
j_names=filter(startsWithJ,names)
printj_names
输出结果是元组:('Jack','Jill')
注意到了吗,上面的2个结果都是tuple而不是list,再一次说明fliter的返回值类型与参数序列的类型保持一致
J. 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