在python中定义类时,为什么不能在uuu new_uuuuu中使用list(filter(boolean,python_list))?

2024-10-04 09:22:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我意识到在定义类时不可能在__new__中应用list(filter(_,_))。 但是,可以单独使用过滤器或列表

控制台抛出此错误:

TypeError: 'list' object is not callable

这不起作用:

class test():    
   def __init__(self):     
       self.mean = [1,2,3,4]
bool_list=[True,False,True,True]     

class tracegrad_set():     
   def __new__(cls,obj,bool_list):     
       list(filter(bool_list,obj.mean))     
       obj.mean= obj.mean[:2]     
       return obj       
a=test()     
b=tracegrad_set(a,bool_list)

同时这个

class test():    
   def __init__(self):     
       self.mean = [1,2,3,4]
bool_list=[True,False,True,True]     

class tracegrad_set():     
   def __new__(cls,obj,bool_list):     
       filter(bool_list,obj.mean)   
       obj.mean= obj.mean[:2]     
       return obj       
a=test()     
b=tracegrad_set(a,bool_list)

还是这个

class test():    
   def __init__(self):     
       self.mean = [1,2,3,4]
bool_list=[True,False,True,True]     

class tracegrad_set():     
   def __new__(cls,obj,bool_list):     
       list(bool_list,obj.mean)   
       obj.mean= obj.mean[:2]     
       return obj       
a=test()     
b=tracegrad_set(a,bool_list)

Tags: testselffalsetrueobjnewinitdef
1条回答
网友
1楼 · 发布于 2024-10-04 09:22:49

filter期望第一个参数是可调用的,或者是无(只是过滤掉计算为false的元素);您在那里提供了list个布尔值,因此当您尝试访问筛选结果时,会引发TypeError。筛选器试图调用类似bool_list(obj.mean[0])的内容

我只能假设,您希望保留bool列表中索引为True的列表元素,使用列表理解更容易实现这一点,例如:

my_new_list = [value for keep, value in zip(bool_list, obj.mean) if keep]

或者,如果您坚持使用map/filter,您可以使用以下内容:

from operator import itemgetter
...
my_new_list = map(itemgetter(1), filter(itemgetter(0), zip(bool_list, obj.mean))
# or use lambda: t: t[<index>]

相关问题 更多 >