有没有人能帮我做一个类对象列表的迭代?
我想在一个去中心化的网络中建立一个节点相互作用的模拟。每个节点都被创建为Node类中的一个对象。每个节点都有自己的名字和最多三个其他节点(也是sam类中的对象)的列表。
对于稍后的模拟,每个节点有三个列表是必要的。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告诉我索引必须是整数或切片。任何建议都将不胜感激。稍后,我将不得不清理重复提到的节点的列表,任何关于这方面的建议也会很好。干杯
发布于 2016-08-15 15:19:31
好的,多亏了二战我找到了答案
for i in self.l1:
self.l2.extend(i.l1)
for i in self.l2:
self.l3.extend(i.l1)
可以使用以下命令消除列表中出现重复的节点:
from collections import OrderedDict as odict
self.l2=list(odict.fromkeys(self.l2))
self.l3=list(odict.fromkeys(self.l3))
https://stackoverflow.com/questions/38957286
复制相似问题