当我在执行filter函数的时候,一直报<filter object at 0x03000750>。我的环境是Python3.6
>>> def is_even(x):
return x&1 !=0
>>> filter(is_even,[1,2,3,4,5,6,7])
<filter object at 0x03000750>
后来百度才百度出来,应该讲filter函数转换成list
>>> list(filter(is_even,[1,2,3,4,5,6,7]))
[1, 3, 5, 7]
当当,这就是正确答案了。
下面再举个例子,来练习一下filter函数。
from random import randint def odd(n): return n % 2 == 1 ###确定一个整型是基数还是偶数的bool函数 allNums = [] for eachNum in range(9): #产生10个 (randint(1,99)) #在1~100的随机函数 a=list(filter(odd,allNums)) #用filter除掉所有的偶数 print(a)[89, 73, 89, 29]
[49, 41, 99, 7]
[69, 85, 99, 71, 3]
[19, 95, 41]
我们注意到odd()函数是一个非常简单的能用lambda表达式替换的:
from random import randint #def odd(n): # return n % 2 == 1 ###确定一个整型是基数还是偶数的bool函数 #lambda n:(n%2 == 1) allNums = [] for eachNum in range(9): #产生10个 (randint(1,99)) #在1~100的随机函数 a=list(filter(lambda n:(n%2 == 1),allNums)) #用filter除掉所有的偶数 print(a)
[83, 13, 93, 21]
[33, 45, 87, 29, 55, 7]
[43, 25, 69, 19, 5]
[69, 95, 65, 79, 15]
接着放个大招,化简下我们的代码。
from random import randint #def odd(n): # return n % 2 == 1 ###确定一个整型是基数还是偶数的bool函数 #lambda n:(n%2 == 1) allNums = [] for eachNum in range(9): #产生10个 (randint(1,99)) #在1~100的随机函数 #a=list(filter(lambda n:(n%2 == 1),allNums)) # #用filter除掉所有的偶数 b=[n for n in allNums if n%2 ] print(b ) [43, 99, 67, 69, 27] [41, 5, 31, 63, 33, 53] 还可以再接着简化一下我们的代码吗????当然可以!!!!自己想象下吧,特别想知道的童鞋记得给我留言啊