filter函数报<filter object at 0x03000750>

当我在执行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个
    allNums.append(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个
    allNums.append(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个
    allNums.append(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]

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安果移不动

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值