谁能帮我在类对象列表的迭代?
我想在一个分散的网络中建立一个节点相互交互的模拟。每个节点都作为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))