如何解决是否可以通过知道对象的值来获取对象在实例数组中的索引?
是否有一种仅通过了解对象的属性来获取实例数组中实例索引的方法。
我有这样的东西:
class NodeGene:
def __init__(self):
self.__initBias()
def __initBias(self):
#Creates a random bias and assigns it to self.bias
class ConnectionGene:
#nodeIn and nodeOut are instances of NodeGene
def __init__(self,nodeIn,nodeOut,innovationNumber):
self.nodeIn = nodeIn
self.nodeOut = nodeOut
self.innovationNumber = innovationNumber
self.__initWeight()
def __initWeight(self):
#Creates a random weight and assigns it to self.weight
class Genome:
def __init__(self,connections):
#connections is an array of ConnectionGene instances
self.connections = connections
如果我具有要查找的实例的nodeIn和innovationNumber,如何获取连接中ConnectionGene的索引
解决方法
以下是您可以执行此操作的一种方法。我不确定您要在哪里调用代码,因此在下面我将连接称为“连接”。
indices = [index for index,elem in enumerate(connections) if elem.nodeIn == ___ if elem.innovationNumber == ____]
if indices:
return indices[0]
return -1
只需填写空白即可。显然,您可以更改是要返回第一个索引还是仅返回所有索引。
如果要检查nodeIn是否与另一个NodeGene是同一对象实例,则可以使用is
代替==
。如果您使用的是==
,则可以在NodeGene类上定义__eq__
方法。
假设conn_list
是ConnectionGene
实例的列表。然后您有几个选择:
idx = None
for i,c in enumerate(conn_list):
if c.nodeIn == 0 and c.innovationNumber == 0:
idx = i
break
或
idx_list = [i for i,c in enumerate(conn_list) if c.nodeIn == 0 and c.innovationNumber == 0]
或
idx = next(i for i,c in enumerate(conn_list) if c.nodeIn == 0 and c.innovationNumber == 0)
如果您要这样做很多次,最好制作参考字典并在那里进行快速查找:
dct = {(c.nodeIn,c.innovationNumber): i for i,c in enumerate(conn_list)}
...
idx = dct[0,0] # very fast
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。