我可以通过知道对象的值来获取实例数组中对象的索引吗?

有没有一种方法可以通过仅知道该对象的属性来获取实例数组中实例的索引?


我有这样的事情:


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 的索引?


Smart猫小萌
浏览 199回答 2
2回答

慕森卡

假设conn_list是一个实例列表ConnectionGene。然后你有几个选择:idx = Nonefor 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

叮当猫咪

以下是您可以执行此操作的一种方法。我不确定您希望在哪里调用代码,因此我将在下面将连接称为“连接”。indices = [index for index, elem in enumerate(connections) if elem.nodeIn == ___ if elem.innovationNumber == ____]if indices:    return indices[0]return -1只需填空即可。显然,您可以更改是要返回第一个索引还是仅返回所有索引。如果您想检查 nodeIn 是否与另一个 NodeGene 是同一对象实例,您可以使用is代替==。如果您使用的是==,则可以__eq__在 NodeGene 类上定义该方法。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python