为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Smart猫小萌 2023-08-15 18:44:25
有没有一种方法可以通过仅知道该对象的属性来获取实例数组中实例的索引?我有这样的事情:class NodeGene:     def __init__(self):        self.__initBias()     def __initBias(self):        #Creates a random bias and assigns it to self.biasclass 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.weightclass Genome:     def __init__(self, connections):        #connections is an array of ConnectionGene instances        self.connections = connections如果我有要查找的实例的nodeIn 和innovationNumber,如何获取连接中ConnectionGene 的索引?
查看完整描述

2 回答

?
慕森卡

TA贡献1806条经验 获得超8个赞

假设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


查看完整回答
反对 回复 2023-08-15
?
叮当猫咪

TA贡献1776条经验 获得超12个赞

以下是您可以执行此操作的一种方法。我不确定您希望在哪里调用代码,因此我将在下面将连接称为“连接”。


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 类上定义该方法。


查看完整回答
反对 回复 2023-08-15
  • 2 回答
  • 0 关注
  • 193 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号