Двойной массив ссылок в Python - PullRequest
2 голосов
/ 16 апреля 2010

Поскольку я довольно новичок, этот вопрос будет звучать глупо, но я понятия не имею, как к этому подойти.

Я пытаюсь взять список узлов и для каждого из узлов хочу создать массив предшественников и преемников в упорядоченном массиве всех узлов.

В настоящее время мой код выглядит так:

    nodes = self.peers.keys()
    nodes.sort()

    peers = {}
    numPeers = len(nodes)
    for i in nodes:
        peers[i] = [self.coordinator]
    for i in range(0,len(nodes)):
        peers[nodes[i%numPeers]].append(nodes[(i+1)%numPeers])
        peers[nodes[(i+1)%numPeers]].append(nodes[i%numPeers])
#        peers[nodes[i%numPeers]].append(nodes[(i+4)%numPeers])
#        peers[nodes[(i+4)%numPeers]].append(nodes[i%numPeers])

Последние две строки следует позже использовать для создания графика пропуска, но это не очень важно. Проблема в том, что он не работает надежно, иногда пропускается предшественник или преемник, а вместо него используется следующий и т. Д. Это вообще правильно или есть лучший способ сделать это? В основном мне нужно получить индексы массива с определенными смещениями друг от друга.

Есть идеи?

1 Ответ

2 голосов
/ 16 апреля 2010

Я бы почти поспорил, что при возникновении ошибки значения в узлах имеют дубликаты, что может привести к перепутыванию словаря в одноранговых узлах. В вашем коде предполагается, что значения в узлах уникальны.

...