filter函数报

时间:2025-05-08 14:20:01

当我在执行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]

还可以再接着简化一下我们的代码吗????当然可以!!!!自己想象下吧,特别想知道的童鞋记得给我留言啊