我有一個對象是網絡設備對象的列表,因此它們具有名稱和方法(如connected_neighbors)等屬性。我想查找所有相互連接的對象來創建鏈接對象。我在做類似下面,但它正在變成很慢查找大型列表中的對象之間的連接
for ref_device in iter(devices):
for device in iter(devices):
if ref_dev.name in device.connected_neighbor_devices():
print ref_dev.name + ' <--> ' + device.name
更新: 我的數據是基本網絡設備對象的列表。這些對象是由json生成的,json本身代表這些網絡設備,它們的接口和這些接口上的鄰居。我有一個非常大的網絡設備對象列表,每個對象都有幾個接口。我想從這個名單裏的某個鏈接對象也有通過任意數量的接口連接兩個網絡設備對象創建鏈接對象(或基本上是彼此的鄰居)
我已經更新了我的代碼如下
class Link(object):
def __init__(self, dev_a, dev_b):
self.dev_a = dev_a
self.dev_b = dev_b
def __repr__(self):
return '{} - {}'.format(dev_a.name, dev_b.name)
links = []
names = {dev.name for dev in devices}
for ref_device in devices:
for neigh in ref_device.connected_neighbor_devices():
if neigh in names:
neigh_device = [d for d in devices if d.name == neigh][0]
links.append(Link(ref_device, neigh_device))
附註:沒有理由顯式調用iter。 'for'循環隱式地在它們傳遞的迭代中調用'iter',所以當(快速)隱式調用不管發生什麼時,都只是在慢速顯式調用上浪費時間。 – ShadowRanger
我們不知道您的數據以及數據如何連接。但是你不能從列表中刪除已經匹配的'ref_device'嗎?因此,循環運行時,「設備中的設備」循環越來越小。 –
我的數據基本上是網絡設備對象的列表。這些對象是由json數據生成的,json數據本身代表這些網絡設備,它們的接口和這些接口上的鄰居。我有一個非常大的網絡設備對象列表,每個對象都有幾個接口。我想從這個列表創建鏈接對象,其中一個鏈接對象將有兩個網絡設備對象通過任意數量的接口連接(或基本上是彼此的鄰居) – zsh