如何在python中迭代/操作类对象列表(分散网络模拟中的节点爬行)



谁能帮我在类对象列表的迭代?

我想在一个分散的网络中建立一个节点相互交互的模拟。每个节点都作为node类中的对象创建。每个节点都得到他的名字和一个最多三个与他相连的其他节点(也是同一类中的对象)的列表。

对于后面的模拟,每个节点必须有三个列表。L1包含他所连接的所有节点L2包含l1的节点所连接的所有节点L3包含l2中所有连接到

的节点

我想动态创建l2和l3。我的想法是,因为每个节点都知道他直接连接的节点,我只需要从每个节点获取l1。到目前为止,我有这个(虽然我不喜欢l2现在是如何创建的,因为它是静态的)。

class Node:
    def __init__(self,nid,ports):
        self.id=nid
        self.port1=ports[0]
        self.port2=ports[1]
        self.port3=ports[2]
        self.l1=[self.port1,self.port2,self.port3]
        self.l2=[]
        self.l3=[]
    def node_crawl(self):
        self.l2=self.port1.l1+self.port2.l1+self.port3.l1
    def show_node(self):
        print (" Node-id:   ", self.id)
        print (" Net-Setup","n","Port 1:   ",self.port1,"n","Port 2: ",self.port2,"n","Port 3:   ",self.port3)
if __name__ == '__main__':

    node1=Node("node1",[node2,node3,node6])
    node2=Node("node2",[node1,node3,node5])
    node3=Node("node3",[node2,node4,node6])
    node4=Node("node4",[node3,node5,node6])
    node5=Node("node5",[node2,node4])
    node6=Node("node6",[node3,node4,node1])
    node1.node_crawl()

我想也许我可以写一个for循环来使用前面列表中的每个元素。

for i in self.l1:
    self.l2.append(self.l1[i].l1)

但这不起作用。Python告诉我下标必须是整数或切片。任何建议都将非常感激。稍后我将不得不清理双提及节点的列表,任何关于这方面的建议也会很棒。欢呼声

多亏了二战,我找到了答案

 for i in self.l1:        
        self.l2.extend(i.l1)
 for i in self.l2:        
        self.l3.extend(i.l1)

在列表中出现double的节点可以使用:

from collections import OrderedDict as odict
self.l2=list(odict.fromkeys(self.l2))
self.l3=list(odict.fromkeys(self.l3))

最新更新