[英]Why cannot use list(filter(boolean,python_list)) inside __new__ while defining a class in python?
我意识到在定义类时__new__
在__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)
filter
期望作为第一个参数是可调用的或 None (仅过滤掉评估为 false-ish 的元素); 您在那里提供了一个布尔值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>]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.