Python中过滤时出错
我刚开始学习Python,这是我的代码:
def f(n):
return (n%2 != 0)
def square (n):
return (n*n)
def applyif(list):
filter(f, list)
square(list)
print(list)
用户输入一个列表,这个列表会通过f(n)进行过滤,然后,如果过滤条件满足,列表中的奇数元素会被平方。
不幸的是,我遇到了这个错误:
Traceback (most recent call last):
File "<pyshell#4>", line 1, in <module>
applyif[1,2,3,4]
TypeError: 'function' object is not subscriptable
如果有人能帮我找出我哪里出错了,我会非常感激。
编辑:我把代码改成了这样:
def f(x):
return (n%2 != 0)
def square (n):
for i in n:
n[i] = n[i]*n[i]
return n
def applyif(lst):
xyz = []
xyz = filter(f,lst)
print(xyz)
当我调用时,我遇到了这个错误:
applyif([1,2,3,4]) :
<filter object at 0x028D2C30>
3 个回答
1
使用 applyif([1,2,3,4]) 而不是 applyif[1,2,3,4],就像上面建议的那样。此外,你的 square(n) 函数可能会遇到问题。
现在,square 函数是接收一个整数并返回一个整数。但是你传给它的是一个列表。考虑把你的代码改成这样:
编辑:
def f(x):
return (x%2 != 0)
def square (n):
for i in range(0,len(n)):
n[i] = n[i]*n[i]
return n
def applyif(lst):
print(list(filter(f,square(lst))))
4
你现在是这样调用的:
applyif[1,2,3,4]
这是一种语法错误,你需要这样调用:
applyif([1,2,3,4])
另外,你在计算两个函数的结果,但最后却把结果丢掉了。你需要把变量重新绑定到返回的结果上。
li = filter(f, li)
li = square(li)
(不要把局部变量命名为 list
)
你还可以把你的函数写成:
print list(map(square, filter(f, li))) # assuming python 3, drop the `list` call in py2
或者
print [square(x) for x in li if filter(x)]
2
不要把你的变量命名为 list
,而是用 applyif([1,2,3,4])
这种写法,而不是 applyif[1,2,3,4]
。
def applyif(lst):
filter(f, lst)
square(lst)
print(lst)
applyif([1,2,3,4])