我可以通过知道对象的值来获取实例数组中对象的索引吗?
Can I get the index of an object in an instance array by knowing a value of the object?
有没有一种方法可以通过只知道该对象的 属性 来获取实例数组中实例的索引?
我有这样的东西:
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
填空即可。显然,您可以更改是要 return 第一个索引还是所有索引。
如果你想检查nodeIn是否与另一个NodeGene是同一个对象实例,你可以使用is
而不是==
。如果你使用的是==
,你可以在NodeGeneclass.
上定义__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
有没有一种方法可以通过只知道该对象的 属性 来获取实例数组中实例的索引?
我有这样的东西:
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
填空即可。显然,您可以更改是要 return 第一个索引还是所有索引。
如果你想检查nodeIn是否与另一个NodeGene是同一个对象实例,你可以使用is
而不是==
。如果你使用的是==
,你可以在NodeGeneclass.
__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