ネットワークデバイスであるオブジェクトのリストを持っているので、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から生成されます。私はいくつかのインターフェイスを持つネットワークデバイスオブジェクトの非常に大きなリストを持っています。私は
を次のようにが、私は自分のコードを更新している(お互いの隣人であるか、基本的に)リンクオブジェクトは、任意の数のインターフェイスを介して接続されている2つのネットワークデバイスオブジェクトを持つことになります。このリストからリンクオブジェクトを作成したいです
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 'ループは渡されたiterableに対して暗黙的に' iter'を呼び出します。なぜなら、(高速な)暗黙の呼び出しが何であっても発生しなければならないときは、(遅い)明示的な呼び出しで時間を無駄にしているだけです。 – ShadowRanger
あなたのデータとデータがどのように接続されているかは分かりません。しかし、リストからすでに一致した 'ref_device'を削除できませんでしたか?したがって、 'デバイス内のデバイスのための'ループは、ループが実行されるにつれて小さくなります。 –
私のデータは基本的にネットワークデバイスオブジェクトのリストです。これらのオブジェクトは、これらのネットワークデバイス、それらのインタフェース、およびこれらのインタフェース上のネイバーを表すjsonデータから生成されます。私はいくつかのインターフェイスを持つネットワークデバイスオブジェクトの非常に大きなリストを持っています。私はこのリストから、リンクオブジェクトに2つのネットワークデバイスオブジェクトを持つリンクオブジェクトを作成したいと考えています(または基本的には互いに隣り合っています) – zsh