Python中过滤时出错

-2 投票
3 回答
1270 浏览
提问于 2025-04-18 05:18

我刚开始学习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])

撰写回答