2017-06-16 76 views
-3
my_list = [3, 4, 7, 2, 9, 170] 

f = filter(lambda x: x%2==0, my_list) 

g = f(my_list) 

这个lambda引发了一个问题,它引发了一个“列表对象不可调用”的错误。这是一个非常简单的λ,所以我不太清楚我在做什么错在这里lambda在python中说的列表对象不可调用

+4

但过滤的结果是(在Python的2.X)的列表。不是过滤器,你在列表**上做了过滤。 –

+1

'f'是一个列表,你调用它就像它是一个函数'f(my_list)' – Szymon

+0

我不认为你需要通过你的列表lambda'''f'''在第二遍 - '''f'''应该只包含你正在查找的过滤列表。 –

回答

7

你也许认为f过滤,实在不行,f是过滤对my_list结果。这是中的list中的发生器(filter对象)。

但是,您可以构建一个过滤器,例如通过使用functoolspartial功能,如:

from functools import partial 

f = partial(filter,lambda x : x % 2 == 0) # construct a "filter" 

g = f(my_list) # filter my_list
+2

爱我一个好的部分 –

+0

那么在这种情况下发生了什么?我一直被困在一个小时或两个小时的问题上,似乎无法弄清楚错误是否在我的最后。 #完成下面的功能。 F =拉姆达my_list:X%2 == 0,如果my_list '' 不f中.__ name__: 提高ValueError异常( '请写lambda函数') my_list = json.loads(sys.stdin.readline ()) for f in(my_list): print(x) – a1letterword

+0

我只能编辑函数lambda。出于某种原因,我不断得到一个错误,说my_list没有被定义 – a1letterword