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
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 类上定义该方法。
添加回答
举报
