Python如何创建操作联动的对象列表 实现修改双向同步
问题核心原因
- 你当前的删除逻辑仅操作了
cluster0[x].clusterNodes列表,没有同步处理NODES列表,自然不会实现联动删除效果 - Python中列表存储的是对象的引用,你不需要使用
copy()或deepcopy(),两个列表存的本身就是同一个Node实例的引用,只要删除时同时操作两个列表即可 - 现有代码还存在边遍历列表边删除元素的常见问题,会导致部分元素被跳过无法遍历到
修正后的实现方案
修改删除逻辑部分的代码即可,完整可运行代码如下:
import math class Node(): def __init__(self,id): self.id=id class cluster(): def __init__(self,id=0, Level=0, clusterNodes=[]): self.id=id self.clusterLevel=0 self.clusterNodes = [] NODES =[] cluster0=[] Dn=5 Gn=2 counter=0 deviceNodeId = 0 GATEWAYIDS = ['a','b','c','d','e','f'] for i in GATEWAYIDS: cluster0.append(cluster(GATEWAYIDS.index(i),0,[])) for i in GATEWAYIDS: for j in range(Dn): NODES.append(Node(deviceNodeId)) cluster0 [math.floor((deviceNodeId)/Dn)].clusterNodes= NODES[Gn+counter:Gn+counter+j+1] deviceNodeId += 1 counter+=j+1 for x in range(Gn): # 遍历列表副本避免删元素导致漏遍历 for node in list(cluster0[x].clusterNodes): if node.id == 0: # 先从cluster的节点列表删除 cluster0[x].clusterNodes.remove(node) # 同步从NODES列表删除同一个节点对象 if node in NODES: NODES.remove(node) print('All nodes in NODES look as follows:') for x in NODES: print (x.id)
验证效果
运行修改后的代码,打印NODES列表时id为0的节点已经被同步删除,符合联动操作的要求。
内容的提问来源于stack exchange,提问作者Riham ELSAADANY
相关产品推荐
相关产品推荐

